mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-12 19:17:35 +00:00
updated pixi to v2
This commit is contained in:
parent
a5b3d2f671
commit
58b83f7297
95 changed files with 44677 additions and 3522 deletions
765
app/Lib/Vendor/src/pixi/display/DisplayObject.js
vendored
Executable file
765
app/Lib/Vendor/src/pixi/display/DisplayObject.js
vendored
Executable file
|
|
@ -0,0 +1,765 @@
|
|||
/**
|
||||
* @author Mat Groves http://matgroves.com/ @Doormat23
|
||||
*/
|
||||
|
||||
/**
|
||||
* The base class for all objects that are rendered on the screen.
|
||||
* This is an abstract class and should not be used on its own rather it should be extended.
|
||||
*
|
||||
* @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 pivot point of the displayObject that it rotates around
|
||||
*
|
||||
* @property pivot
|
||||
* @type Point
|
||||
*/
|
||||
this.pivot = new PIXI.Point(0,0);
|
||||
|
||||
/**
|
||||
* 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 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|Circle|Ellipse|Polygon
|
||||
*/
|
||||
this.hitArea = null;
|
||||
|
||||
/**
|
||||
* This is used to indicate if the displayObject should display a mouse hand cursor on rollover
|
||||
*
|
||||
* @property buttonMode
|
||||
* @type Boolean
|
||||
*/
|
||||
this.buttonMode = false;
|
||||
|
||||
/**
|
||||
* Can this object be rendered
|
||||
*
|
||||
* @property renderable
|
||||
* @type Boolean
|
||||
*/
|
||||
this.renderable = false;
|
||||
|
||||
/**
|
||||
* [read-only] The display object container that contains this display object.
|
||||
*
|
||||
* @property parent
|
||||
* @type DisplayObjectContainer
|
||||
* @readOnly
|
||||
*/
|
||||
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
|
||||
* @readOnly
|
||||
*/
|
||||
this.stage = null;
|
||||
|
||||
/**
|
||||
* [read-only] The multiplied alpha of the displayObject
|
||||
*
|
||||
* @property worldAlpha
|
||||
* @type Number
|
||||
* @readOnly
|
||||
*/
|
||||
this.worldAlpha = 1;
|
||||
|
||||
/**
|
||||
* [read-only] Whether or not the object is interactive, do not toggle directly! use the `interactive` property
|
||||
*
|
||||
* @property _interactive
|
||||
* @type Boolean
|
||||
* @readOnly
|
||||
* @private
|
||||
*/
|
||||
this._interactive = false;
|
||||
|
||||
/**
|
||||
* This is the cursor that will be used when the mouse is over this object. To enable this the element must have interaction = true and buttonMode = true
|
||||
*
|
||||
* @property defaultCursor
|
||||
* @type String
|
||||
*
|
||||
*/
|
||||
this.defaultCursor = 'pointer';
|
||||
|
||||
/**
|
||||
* [read-only] Current transform of the object based on world (parent) factors
|
||||
*
|
||||
* @property worldTransform
|
||||
* @type Matrix
|
||||
* @readOnly
|
||||
* @private
|
||||
*/
|
||||
this.worldTransform = new PIXI.Matrix();
|
||||
|
||||
/**
|
||||
* cached sin rotation and cos rotation
|
||||
*
|
||||
* @property _sr
|
||||
* @type Number
|
||||
* @private
|
||||
*/
|
||||
this._sr = 0;
|
||||
|
||||
/**
|
||||
* cached sin rotation and cos rotation
|
||||
*
|
||||
* @property _cr
|
||||
* @type Number
|
||||
* @private
|
||||
*/
|
||||
this._cr = 1;
|
||||
|
||||
/**
|
||||
* The area the filter is applied to like the hitArea this is used as more of an optimisation
|
||||
* rather than figuring out the dimensions of the displayObject each frame you can set this rectangle
|
||||
*
|
||||
* @property filterArea
|
||||
* @type Rectangle
|
||||
*/
|
||||
this.filterArea = null;//new PIXI.Rectangle(0,0,1,1);
|
||||
|
||||
/**
|
||||
* The original, cached bounds of the object
|
||||
*
|
||||
* @property _bounds
|
||||
* @type Rectangle
|
||||
* @private
|
||||
*/
|
||||
this._bounds = new PIXI.Rectangle(0, 0, 1, 1);
|
||||
|
||||
/**
|
||||
* The most up-to-date bounds of the object
|
||||
*
|
||||
* @property _currentBounds
|
||||
* @type Rectangle
|
||||
* @private
|
||||
*/
|
||||
this._currentBounds = null;
|
||||
|
||||
/**
|
||||
* The original, cached mask of the object
|
||||
*
|
||||
* @property _currentBounds
|
||||
* @type Rectangle
|
||||
* @private
|
||||
*/
|
||||
this._mask = null;
|
||||
|
||||
/**
|
||||
* Cached internal flag.
|
||||
*
|
||||
* @property _cacheAsBitmap
|
||||
* @type Boolean
|
||||
* @private
|
||||
*/
|
||||
this._cacheAsBitmap = false;
|
||||
|
||||
/**
|
||||
* Cached internal flag.
|
||||
*
|
||||
* @property _cacheIsDirty
|
||||
* @type Boolean
|
||||
* @private
|
||||
*/
|
||||
this._cacheIsDirty = false;
|
||||
|
||||
|
||||
/*
|
||||
* MOUSE Callbacks
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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}
|
||||
*/
|
||||
|
||||
//Left button
|
||||
/**
|
||||
* A callback that is used when the users clicks on the displayObject with their mouse's left button
|
||||
* @method click
|
||||
* @param interactionData {InteractionData}
|
||||
*/
|
||||
|
||||
/**
|
||||
* A callback that is used when the user clicks the mouse's left button down over the sprite
|
||||
* @method mousedown
|
||||
* @param interactionData {InteractionData}
|
||||
*/
|
||||
|
||||
/**
|
||||
* A callback that is used when the user releases the mouse's left button that was over the displayObject
|
||||
* for this callback to be fired, the mouse's left button must have been pressed down over the displayObject
|
||||
* @method mouseup
|
||||
* @param interactionData {InteractionData}
|
||||
*/
|
||||
|
||||
/**
|
||||
* A callback that is used when the user releases the mouse's left button that was over the displayObject but is no longer over the displayObject
|
||||
* for this callback to be fired, the mouse's left button must have been pressed down over the displayObject
|
||||
* @method mouseupoutside
|
||||
* @param interactionData {InteractionData}
|
||||
*/
|
||||
|
||||
//Right button
|
||||
/**
|
||||
* A callback that is used when the users clicks on the displayObject with their mouse's right button
|
||||
* @method rightclick
|
||||
* @param interactionData {InteractionData}
|
||||
*/
|
||||
|
||||
/**
|
||||
* A callback that is used when the user clicks the mouse's right button down over the sprite
|
||||
* @method rightdown
|
||||
* @param interactionData {InteractionData}
|
||||
*/
|
||||
|
||||
/**
|
||||
* A callback that is used when the user releases the mouse's right button that was over the displayObject
|
||||
* for this callback to be fired the mouse's right button must have been pressed down over the displayObject
|
||||
* @method rightup
|
||||
* @param interactionData {InteractionData}
|
||||
*/
|
||||
|
||||
/**
|
||||
* A callback that is used when the user releases the mouse's right button that was over the displayObject but is no longer over the displayObject
|
||||
* for this callback to be fired, the mouse's right button must have been pressed down over the displayObject
|
||||
* @method rightupoutside
|
||||
* @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 touches 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.prototype.constructor = PIXI.DisplayObject;
|
||||
|
||||
/**
|
||||
* Indicates if the sprite will have touch and mouse interactivity. It is false by default
|
||||
*
|
||||
* @property interactive
|
||||
* @type Boolean
|
||||
* @default false
|
||||
*/
|
||||
Object.defineProperty(PIXI.DisplayObject.prototype, 'interactive', {
|
||||
get: function() {
|
||||
return this._interactive;
|
||||
},
|
||||
set: function(value) {
|
||||
this._interactive = value;
|
||||
|
||||
// TODO more to be done here..
|
||||
// need to sort out a re-crawl!
|
||||
if(this.stage)this.stage.dirty = true;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* [read-only] Indicates if the sprite is globally visible.
|
||||
*
|
||||
* @property worldVisible
|
||||
* @type Boolean
|
||||
*/
|
||||
Object.defineProperty(PIXI.DisplayObject.prototype, 'worldVisible', {
|
||||
get: function() {
|
||||
var item = this;
|
||||
|
||||
do
|
||||
{
|
||||
if(!item.visible)return false;
|
||||
item = item.parent;
|
||||
}
|
||||
while(item);
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Sets a mask for the displayObject. A mask is an object that limits the visibility of an object to the shape of the mask applied to it.
|
||||
* In PIXI a regular mask must be a PIXI.Graphics object. This allows for much faster masking in canvas as it utilises shape clipping.
|
||||
* To remove a mask, set this property to null.
|
||||
*
|
||||
* @property mask
|
||||
* @type Graphics
|
||||
*/
|
||||
Object.defineProperty(PIXI.DisplayObject.prototype, 'mask', {
|
||||
get: function() {
|
||||
return this._mask;
|
||||
},
|
||||
set: function(value) {
|
||||
|
||||
if(this._mask)this._mask.isMask = false;
|
||||
this._mask = value;
|
||||
if(this._mask)this._mask.isMask = true;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Sets the filters for the displayObject.
|
||||
* * IMPORTANT: This is a webGL only feature and will be ignored by the canvas renderer.
|
||||
* To remove filters simply set this property to 'null'
|
||||
* @property filters
|
||||
* @type Array(Filter)
|
||||
*/
|
||||
Object.defineProperty(PIXI.DisplayObject.prototype, 'filters', {
|
||||
|
||||
get: function() {
|
||||
return this._filters;
|
||||
},
|
||||
|
||||
set: function(value) {
|
||||
|
||||
if(value)
|
||||
{
|
||||
// now put all the passes in one place..
|
||||
var passes = [];
|
||||
for (var i = 0; i < value.length; i++)
|
||||
{
|
||||
var filterPasses = value[i].passes;
|
||||
for (var j = 0; j < filterPasses.length; j++)
|
||||
{
|
||||
passes.push(filterPasses[j]);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO change this as it is legacy
|
||||
this._filterBlock = {target:this, filterPasses:passes};
|
||||
}
|
||||
|
||||
this._filters = value;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Set if this display object is cached as a bitmap.
|
||||
* This basically takes a snap shot of the display object as it is at that moment. It can provide a performance benefit for complex static displayObjects.
|
||||
* To remove simply set this property to 'null'
|
||||
* @property cacheAsBitmap
|
||||
* @type Boolean
|
||||
*/
|
||||
Object.defineProperty(PIXI.DisplayObject.prototype, 'cacheAsBitmap', {
|
||||
|
||||
get: function() {
|
||||
return this._cacheAsBitmap;
|
||||
},
|
||||
|
||||
set: function(value) {
|
||||
|
||||
if(this._cacheAsBitmap === value)return;
|
||||
|
||||
if(value)
|
||||
{
|
||||
this._generateCachedSprite();
|
||||
}
|
||||
else
|
||||
{
|
||||
this._destroyCachedSprite();
|
||||
}
|
||||
|
||||
this._cacheAsBitmap = value;
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
* Updates the object transform for rendering
|
||||
*
|
||||
* @method updateTransform
|
||||
* @private
|
||||
*/
|
||||
PIXI.DisplayObject.prototype.updateTransform = function()
|
||||
{
|
||||
// create some matrix refs for easy access
|
||||
var pt = this.parent.worldTransform;
|
||||
var wt = this.worldTransform;
|
||||
|
||||
// temporary matrix variables
|
||||
var a, b, c, d, tx, ty;
|
||||
|
||||
// so if rotation is between 0 then we can simplify the multiplication process..
|
||||
if(this.rotation % PIXI.PI_2)
|
||||
{
|
||||
// check to see if the rotation is the same as the previous render. This means we only need to use sin and cos when rotation actually changes
|
||||
if(this.rotation !== this.rotationCache)
|
||||
{
|
||||
this.rotationCache = this.rotation;
|
||||
this._sr = Math.sin(this.rotation);
|
||||
this._cr = Math.cos(this.rotation);
|
||||
}
|
||||
|
||||
// get the matrix values of the displayobject based on its transform properties..
|
||||
a = this._cr * this.scale.x;
|
||||
b = this._sr * this.scale.x;
|
||||
c = -this._sr * this.scale.y;
|
||||
d = this._cr * this.scale.y;
|
||||
tx = this.position.x;
|
||||
ty = this.position.y;
|
||||
|
||||
// check for pivot.. not often used so geared towards that fact!
|
||||
if(this.pivot.x || this.pivot.y)
|
||||
{
|
||||
tx -= this.pivot.x * a + this.pivot.y * c;
|
||||
ty -= this.pivot.x * b + this.pivot.y * d;
|
||||
}
|
||||
|
||||
// concat the parent matrix with the objects transform.
|
||||
wt.a = a * pt.a + b * pt.c;
|
||||
wt.b = a * pt.b + b * pt.d;
|
||||
wt.c = c * pt.a + d * pt.c;
|
||||
wt.d = c * pt.b + d * pt.d;
|
||||
wt.tx = tx * pt.a + ty * pt.c + pt.tx;
|
||||
wt.ty = tx * pt.b + ty * pt.d + pt.ty;
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// lets do the fast version as we know there is no rotation..
|
||||
a = this.scale.x;
|
||||
d = this.scale.y;
|
||||
|
||||
tx = this.position.x - this.pivot.x * a;
|
||||
ty = this.position.y - this.pivot.y * d;
|
||||
|
||||
wt.a = a * pt.a;
|
||||
wt.b = a * pt.b;
|
||||
wt.c = d * pt.c;
|
||||
wt.d = d * pt.d;
|
||||
wt.tx = tx * pt.a + ty * pt.c + pt.tx;
|
||||
wt.ty = tx * pt.b + ty * pt.d + pt.ty;
|
||||
}
|
||||
|
||||
// multiply the alphas..
|
||||
this.worldAlpha = this.alpha * this.parent.worldAlpha;
|
||||
};
|
||||
|
||||
// performance increase to avoid using call.. (10x faster)
|
||||
PIXI.DisplayObject.prototype.displayObjectUpdateTransform = PIXI.DisplayObject.prototype.updateTransform;
|
||||
|
||||
/**
|
||||
* Retrieves the bounds of the displayObject as a rectangle object
|
||||
*
|
||||
* @method getBounds
|
||||
* @param matrix {Matrix}
|
||||
* @return {Rectangle} the rectangular bounding area
|
||||
*/
|
||||
PIXI.DisplayObject.prototype.getBounds = function(matrix)
|
||||
{
|
||||
matrix = matrix;//just to get passed js hinting (and preserve inheritance)
|
||||
return PIXI.EmptyRectangle;
|
||||
};
|
||||
|
||||
/**
|
||||
* Retrieves the local bounds of the displayObject as a rectangle object
|
||||
*
|
||||
* @method getLocalBounds
|
||||
* @return {Rectangle} the rectangular bounding area
|
||||
*/
|
||||
PIXI.DisplayObject.prototype.getLocalBounds = function()
|
||||
{
|
||||
return this.getBounds(PIXI.identityMatrix);///PIXI.EmptyRectangle();
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the object's stage reference, the stage this object is connected to
|
||||
*
|
||||
* @method setStageReference
|
||||
* @param stage {Stage} the stage that the object will have as its current stage reference
|
||||
*/
|
||||
PIXI.DisplayObject.prototype.setStageReference = function(stage)
|
||||
{
|
||||
this.stage = stage;
|
||||
if(this._interactive)this.stage.dirty = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Useful function that returns a texture of the displayObject object that can then be used to create sprites
|
||||
* This can be quite useful if your displayObject is static / complicated and needs to be reused multiple times.
|
||||
*
|
||||
* @method generateTexture
|
||||
* @param resolution {Number} The resolution of the texture being generated
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param renderer {CanvasRenderer|WebGLRenderer} The renderer used to generate the texture.
|
||||
* @return {Texture} a texture of the graphics object
|
||||
*/
|
||||
PIXI.DisplayObject.prototype.generateTexture = function(resolution, scaleMode, renderer)
|
||||
{
|
||||
var bounds = this.getLocalBounds();
|
||||
|
||||
var renderTexture = new PIXI.RenderTexture(bounds.width | 0, bounds.height | 0, renderer, scaleMode, resolution);
|
||||
|
||||
PIXI.DisplayObject._tempMatrix.tx = -bounds.x;
|
||||
PIXI.DisplayObject._tempMatrix.ty = -bounds.y;
|
||||
|
||||
renderTexture.render(this, PIXI.DisplayObject._tempMatrix);
|
||||
|
||||
return renderTexture;
|
||||
};
|
||||
|
||||
/**
|
||||
* Generates and updates the cached sprite for this object.
|
||||
*
|
||||
* @method updateCache
|
||||
*/
|
||||
PIXI.DisplayObject.prototype.updateCache = function()
|
||||
{
|
||||
this._generateCachedSprite();
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculates the global position of the display object
|
||||
*
|
||||
* @method toGlobal
|
||||
* @param position {Point} The world origin to calculate from
|
||||
* @return {Point} A point object representing the position of this object
|
||||
*/
|
||||
PIXI.DisplayObject.prototype.toGlobal = function(position)
|
||||
{
|
||||
// don't need to u[date the lot
|
||||
this.displayObjectUpdateTransform();
|
||||
return this.worldTransform.apply(position);
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculates the local position of the display object relative to another point
|
||||
*
|
||||
* @method toLocal
|
||||
* @param position {Point} The world origin to calculate from
|
||||
* @param [from] {DisplayObject} The DisplayObject to calculate the global position from
|
||||
* @return {Point} A point object representing the position of this object
|
||||
*/
|
||||
PIXI.DisplayObject.prototype.toLocal = function(position, from)
|
||||
{
|
||||
//
|
||||
if (from)
|
||||
{
|
||||
position = from.toGlobal(position);
|
||||
}
|
||||
|
||||
// don't need to u[date the lot
|
||||
this.displayObjectUpdateTransform();
|
||||
return this.worldTransform.applyInverse(position);
|
||||
};
|
||||
|
||||
/**
|
||||
* Internal method.
|
||||
*
|
||||
* @method _renderCachedSprite
|
||||
* @param renderSession {Object} The render session
|
||||
* @private
|
||||
*/
|
||||
PIXI.DisplayObject.prototype._renderCachedSprite = function(renderSession)
|
||||
{
|
||||
this._cachedSprite.worldAlpha = this.worldAlpha;
|
||||
|
||||
if(renderSession.gl)
|
||||
{
|
||||
PIXI.Sprite.prototype._renderWebGL.call(this._cachedSprite, renderSession);
|
||||
}
|
||||
else
|
||||
{
|
||||
PIXI.Sprite.prototype._renderCanvas.call(this._cachedSprite, renderSession);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Internal method.
|
||||
*
|
||||
* @method _generateCachedSprite
|
||||
* @private
|
||||
*/
|
||||
PIXI.DisplayObject.prototype._generateCachedSprite = function()
|
||||
{
|
||||
this._cacheAsBitmap = false;
|
||||
var bounds = this.getLocalBounds();
|
||||
|
||||
if(!this._cachedSprite)
|
||||
{
|
||||
var renderTexture = new PIXI.RenderTexture(bounds.width | 0, bounds.height | 0);//, renderSession.renderer);
|
||||
|
||||
this._cachedSprite = new PIXI.Sprite(renderTexture);
|
||||
this._cachedSprite.worldTransform = this.worldTransform;
|
||||
}
|
||||
else
|
||||
{
|
||||
this._cachedSprite.texture.resize(bounds.width | 0, bounds.height | 0);
|
||||
}
|
||||
|
||||
//REMOVE filter!
|
||||
var tempFilters = this._filters;
|
||||
this._filters = null;
|
||||
|
||||
this._cachedSprite.filters = tempFilters;
|
||||
|
||||
PIXI.DisplayObject._tempMatrix.tx = -bounds.x;
|
||||
PIXI.DisplayObject._tempMatrix.ty = -bounds.y;
|
||||
|
||||
this._cachedSprite.texture.render(this, PIXI.DisplayObject._tempMatrix, true);
|
||||
|
||||
this._cachedSprite.anchor.x = -( bounds.x / bounds.width );
|
||||
this._cachedSprite.anchor.y = -( bounds.y / bounds.height );
|
||||
|
||||
this._filters = tempFilters;
|
||||
|
||||
this._cacheAsBitmap = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroys the cached sprite.
|
||||
*
|
||||
* @method _destroyCachedSprite
|
||||
* @private
|
||||
*/
|
||||
PIXI.DisplayObject.prototype._destroyCachedSprite = function()
|
||||
{
|
||||
if(!this._cachedSprite)return;
|
||||
|
||||
this._cachedSprite.texture.destroy(true);
|
||||
|
||||
// TODO could be object pooled!
|
||||
this._cachedSprite = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the object using the WebGL renderer
|
||||
*
|
||||
* @method _renderWebGL
|
||||
* @param renderSession {RenderSession}
|
||||
* @private
|
||||
*/
|
||||
PIXI.DisplayObject.prototype._renderWebGL = function(renderSession)
|
||||
{
|
||||
// OVERWRITE;
|
||||
// this line is just here to pass jshinting :)
|
||||
renderSession = renderSession;
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the object using the Canvas renderer
|
||||
*
|
||||
* @method _renderCanvas
|
||||
* @param renderSession {RenderSession}
|
||||
* @private
|
||||
*/
|
||||
PIXI.DisplayObject.prototype._renderCanvas = function(renderSession)
|
||||
{
|
||||
// OVERWRITE;
|
||||
// this line is just here to pass jshinting :)
|
||||
renderSession = renderSession;
|
||||
};
|
||||
|
||||
|
||||
PIXI.DisplayObject._tempMatrix = new PIXI.Matrix();
|
||||
|
||||
/**
|
||||
* The position of the displayObject on the x axis relative to the local coordinates of the parent.
|
||||
*
|
||||
* @property x
|
||||
* @type Number
|
||||
*/
|
||||
Object.defineProperty(PIXI.DisplayObject.prototype, 'x', {
|
||||
get: function() {
|
||||
return this.position.x;
|
||||
},
|
||||
set: function(value) {
|
||||
this.position.x = value;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* The position of the displayObject on the y axis relative to the local coordinates of the parent.
|
||||
*
|
||||
* @property y
|
||||
* @type Number
|
||||
*/
|
||||
Object.defineProperty(PIXI.DisplayObject.prototype, 'y', {
|
||||
get: function() {
|
||||
return this.position.y;
|
||||
},
|
||||
set: function(value) {
|
||||
this.position.y = value;
|
||||
}
|
||||
});
|
||||
515
app/Lib/Vendor/src/pixi/display/DisplayObjectContainer.js
vendored
Normal file
515
app/Lib/Vendor/src/pixi/display/DisplayObjectContainer.js
vendored
Normal file
|
|
@ -0,0 +1,515 @@
|
|||
/**
|
||||
* @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 array of children of this container.
|
||||
*
|
||||
* @property children
|
||||
* @type Array(DisplayObject)
|
||||
* @readOnly
|
||||
*/
|
||||
this.children = [];
|
||||
|
||||
// fast access to update transform..
|
||||
|
||||
};
|
||||
|
||||
// constructor
|
||||
PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype );
|
||||
PIXI.DisplayObjectContainer.prototype.constructor = PIXI.DisplayObjectContainer;
|
||||
|
||||
|
||||
/**
|
||||
* The width of the displayObjectContainer, setting this will actually modify the scale to achieve the value set
|
||||
*
|
||||
* @property width
|
||||
* @type Number
|
||||
*/
|
||||
Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'width', {
|
||||
get: function() {
|
||||
return this.scale.x * this.getLocalBounds().width;
|
||||
},
|
||||
set: function(value) {
|
||||
|
||||
var width = this.getLocalBounds().width;
|
||||
|
||||
if(width !== 0)
|
||||
{
|
||||
this.scale.x = value / width;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.scale.x = 1;
|
||||
}
|
||||
|
||||
|
||||
this._width = value;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* The height of the displayObjectContainer, setting this will actually modify the scale to achieve the value set
|
||||
*
|
||||
* @property height
|
||||
* @type Number
|
||||
*/
|
||||
Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'height', {
|
||||
get: function() {
|
||||
return this.scale.y * this.getLocalBounds().height;
|
||||
},
|
||||
set: function(value) {
|
||||
|
||||
var height = this.getLocalBounds().height;
|
||||
|
||||
if(height !== 0)
|
||||
{
|
||||
this.scale.y = value / height ;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.scale.y = 1;
|
||||
}
|
||||
|
||||
this._height = value;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Adds a child to the container.
|
||||
*
|
||||
* @method addChild
|
||||
* @param child {DisplayObject} The DisplayObject to add to the container
|
||||
* @return {DisplayObject} The child that was added.
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.addChild = function(child)
|
||||
{
|
||||
return this.addChildAt(child, this.children.length);
|
||||
};
|
||||
|
||||
/**
|
||||
* 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 child {DisplayObject} The child to add
|
||||
* @param index {Number} The index to place the child in
|
||||
* @return {DisplayObject} The child that was added.
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index)
|
||||
{
|
||||
if(index >= 0 && index <= this.children.length)
|
||||
{
|
||||
if(child.parent)
|
||||
{
|
||||
child.parent.removeChild(child);
|
||||
}
|
||||
|
||||
child.parent = this;
|
||||
|
||||
this.children.splice(index, 0, child);
|
||||
|
||||
if(this.stage)child.setStageReference(this.stage);
|
||||
|
||||
return child;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Error(child + 'addChildAt: The index '+ index +' supplied is out of bounds ' + this.children.length);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Swaps the position of 2 Display Objects within this container.
|
||||
*
|
||||
* @method swapChildren
|
||||
* @param child {DisplayObject}
|
||||
* @param child2 {DisplayObject}
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2)
|
||||
{
|
||||
if(child === child2) {
|
||||
return;
|
||||
}
|
||||
|
||||
var index1 = this.getChildIndex(child);
|
||||
var index2 = this.getChildIndex(child2);
|
||||
|
||||
if(index1 < 0 || index2 < 0) {
|
||||
throw new Error('swapChildren: Both the supplied DisplayObjects must be a child of the caller.');
|
||||
}
|
||||
|
||||
this.children[index1] = child2;
|
||||
this.children[index2] = child;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the index position of a child DisplayObject instance
|
||||
*
|
||||
* @method getChildIndex
|
||||
* @param child {DisplayObject} The DisplayObject instance to identify
|
||||
* @return {Number} The index position of the child display object to identify
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.getChildIndex = function(child)
|
||||
{
|
||||
var index = this.children.indexOf(child);
|
||||
if (index === -1)
|
||||
{
|
||||
throw new Error('The supplied DisplayObject must be a child of the caller');
|
||||
}
|
||||
return index;
|
||||
};
|
||||
|
||||
/**
|
||||
* Changes the position of an existing child in the display object container
|
||||
*
|
||||
* @method setChildIndex
|
||||
* @param child {DisplayObject} The child DisplayObject instance for which you want to change the index number
|
||||
* @param index {Number} The resulting index number for the child display object
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.setChildIndex = function(child, index)
|
||||
{
|
||||
if (index < 0 || index >= this.children.length)
|
||||
{
|
||||
throw new Error('The supplied index is out of bounds');
|
||||
}
|
||||
var currentIndex = this.getChildIndex(child);
|
||||
this.children.splice(currentIndex, 1); //remove from old position
|
||||
this.children.splice(index, 0, child); //add at new position
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the child at the specified index
|
||||
*
|
||||
* @method getChildAt
|
||||
* @param index {Number} The index to get the child from
|
||||
* @return {DisplayObject} The child at the given index, if any.
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.getChildAt = function(index)
|
||||
{
|
||||
if (index < 0 || index >= this.children.length)
|
||||
{
|
||||
throw new Error('getChildAt: Supplied index '+ index +' does not exist in the child list, or the supplied DisplayObject must be a child of the caller');
|
||||
}
|
||||
return this.children[index];
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes a child from the container.
|
||||
*
|
||||
* @method removeChild
|
||||
* @param child {DisplayObject} The DisplayObject to remove
|
||||
* @return {DisplayObject} The child that was removed.
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.removeChild = function(child)
|
||||
{
|
||||
var index = this.children.indexOf( child );
|
||||
if(index === -1)return;
|
||||
|
||||
return this.removeChildAt( index );
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes a child from the specified index position.
|
||||
*
|
||||
* @method removeChildAt
|
||||
* @param index {Number} The index to get the child from
|
||||
* @return {DisplayObject} The child that was removed.
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.removeChildAt = function(index)
|
||||
{
|
||||
var child = this.getChildAt( index );
|
||||
if(this.stage)
|
||||
child.removeStageReference();
|
||||
|
||||
child.parent = undefined;
|
||||
this.children.splice( index, 1 );
|
||||
return child;
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes all children from this container that are within the begin and end indexes.
|
||||
*
|
||||
* @method removeChildren
|
||||
* @param beginIndex {Number} The beginning position. Default value is 0.
|
||||
* @param endIndex {Number} The ending position. Default value is size of the container.
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.removeChildren = function(beginIndex, endIndex)
|
||||
{
|
||||
var begin = beginIndex || 0;
|
||||
var end = typeof endIndex === 'number' ? endIndex : this.children.length;
|
||||
var range = end - begin;
|
||||
|
||||
if (range > 0 && range <= end)
|
||||
{
|
||||
var removed = this.children.splice(begin, range);
|
||||
for (var i = 0; i < removed.length; i++) {
|
||||
var child = removed[i];
|
||||
if(this.stage)
|
||||
child.removeStageReference();
|
||||
child.parent = undefined;
|
||||
}
|
||||
return removed;
|
||||
}
|
||||
else if (range === 0 && this.children.length === 0)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Error( 'removeChildren: Range Error, numeric values are outside the acceptable range' );
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Updates the transform on all children of this container for rendering
|
||||
*
|
||||
* @method updateTransform
|
||||
* @private
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.updateTransform = function()
|
||||
{
|
||||
if(!this.visible)return;
|
||||
|
||||
this.displayObjectUpdateTransform();
|
||||
|
||||
//PIXI.DisplayObject.prototype.updateTransform.call( this );
|
||||
|
||||
if(this._cacheAsBitmap)return;
|
||||
|
||||
for(var i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
this.children[i].updateTransform();
|
||||
}
|
||||
};
|
||||
|
||||
// performance increase to avoid using call.. (10x faster)
|
||||
PIXI.DisplayObjectContainer.prototype.displayObjectContainerUpdateTransform = PIXI.DisplayObjectContainer.prototype.updateTransform;
|
||||
|
||||
/**
|
||||
* Retrieves the bounds of the displayObjectContainer as a rectangle. The bounds calculation takes all visible children into consideration.
|
||||
*
|
||||
* @method getBounds
|
||||
* @return {Rectangle} The rectangular bounding area
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.getBounds = function()
|
||||
{
|
||||
if(this.children.length === 0)return PIXI.EmptyRectangle;
|
||||
|
||||
// TODO the bounds have already been calculated this render session so return what we have
|
||||
|
||||
var minX = Infinity;
|
||||
var minY = Infinity;
|
||||
|
||||
var maxX = -Infinity;
|
||||
var maxY = -Infinity;
|
||||
|
||||
var childBounds;
|
||||
var childMaxX;
|
||||
var childMaxY;
|
||||
|
||||
var childVisible = false;
|
||||
|
||||
for(var i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
var child = this.children[i];
|
||||
|
||||
if(!child.visible)continue;
|
||||
|
||||
childVisible = true;
|
||||
|
||||
childBounds = this.children[i].getBounds();
|
||||
|
||||
minX = minX < childBounds.x ? minX : childBounds.x;
|
||||
minY = minY < childBounds.y ? minY : childBounds.y;
|
||||
|
||||
childMaxX = childBounds.width + childBounds.x;
|
||||
childMaxY = childBounds.height + childBounds.y;
|
||||
|
||||
maxX = maxX > childMaxX ? maxX : childMaxX;
|
||||
maxY = maxY > childMaxY ? maxY : childMaxY;
|
||||
}
|
||||
|
||||
if(!childVisible)
|
||||
return PIXI.EmptyRectangle;
|
||||
|
||||
var bounds = this._bounds;
|
||||
|
||||
bounds.x = minX;
|
||||
bounds.y = minY;
|
||||
bounds.width = maxX - minX;
|
||||
bounds.height = maxY - minY;
|
||||
|
||||
// TODO: store a reference so that if this function gets called again in the render cycle we do not have to recalculate
|
||||
//this._currentBounds = bounds;
|
||||
|
||||
return bounds;
|
||||
};
|
||||
|
||||
/**
|
||||
* Retrieves the non-global local bounds of the displayObjectContainer as a rectangle. The calculation takes all visible children into consideration.
|
||||
*
|
||||
* @method getLocalBounds
|
||||
* @return {Rectangle} The rectangular bounding area
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.getLocalBounds = function()
|
||||
{
|
||||
var matrixCache = this.worldTransform;
|
||||
|
||||
this.worldTransform = PIXI.identityMatrix;
|
||||
|
||||
for(var i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
this.children[i].updateTransform();
|
||||
}
|
||||
|
||||
var bounds = this.getBounds();
|
||||
|
||||
this.worldTransform = matrixCache;
|
||||
|
||||
return bounds;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the containers Stage reference. This is the Stage that this object, and all of its children, is connected to.
|
||||
*
|
||||
* @method setStageReference
|
||||
* @param stage {Stage} the stage that the container will have as its current stage reference
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.setStageReference = function(stage)
|
||||
{
|
||||
this.stage = stage;
|
||||
if(this._interactive)this.stage.dirty = true;
|
||||
|
||||
for(var i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
var child = this.children[i];
|
||||
child.setStageReference(stage);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes the current stage reference from the container and all of its children.
|
||||
*
|
||||
* @method removeStageReference
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype.removeStageReference = function()
|
||||
{
|
||||
|
||||
for(var i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
var child = this.children[i];
|
||||
child.removeStageReference();
|
||||
}
|
||||
|
||||
if(this._interactive)this.stage.dirty = true;
|
||||
|
||||
this.stage = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the object using the WebGL renderer
|
||||
*
|
||||
* @method _renderWebGL
|
||||
* @param renderSession {RenderSession}
|
||||
* @private
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype._renderWebGL = function(renderSession)
|
||||
{
|
||||
if(!this.visible || this.alpha <= 0)return;
|
||||
|
||||
if(this._cacheAsBitmap)
|
||||
{
|
||||
this._renderCachedSprite(renderSession);
|
||||
return;
|
||||
}
|
||||
|
||||
var i,j;
|
||||
|
||||
if(this._mask || this._filters)
|
||||
{
|
||||
|
||||
// push filter first as we need to ensure the stencil buffer is correct for any masking
|
||||
if(this._filters)
|
||||
{
|
||||
renderSession.spriteBatch.flush();
|
||||
renderSession.filterManager.pushFilter(this._filterBlock);
|
||||
}
|
||||
|
||||
if(this._mask)
|
||||
{
|
||||
renderSession.spriteBatch.stop();
|
||||
renderSession.maskManager.pushMask(this.mask, renderSession);
|
||||
renderSession.spriteBatch.start();
|
||||
}
|
||||
|
||||
// simple render children!
|
||||
for(i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
this.children[i]._renderWebGL(renderSession);
|
||||
}
|
||||
|
||||
renderSession.spriteBatch.stop();
|
||||
|
||||
if(this._mask)renderSession.maskManager.popMask(this._mask, renderSession);
|
||||
if(this._filters)renderSession.filterManager.popFilter();
|
||||
|
||||
renderSession.spriteBatch.start();
|
||||
}
|
||||
else
|
||||
{
|
||||
// simple render children!
|
||||
for(i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
this.children[i]._renderWebGL(renderSession);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the object using the Canvas renderer
|
||||
*
|
||||
* @method _renderCanvas
|
||||
* @param renderSession {RenderSession}
|
||||
* @private
|
||||
*/
|
||||
PIXI.DisplayObjectContainer.prototype._renderCanvas = function(renderSession)
|
||||
{
|
||||
if(this.visible === false || this.alpha === 0)return;
|
||||
|
||||
if(this._cacheAsBitmap)
|
||||
{
|
||||
|
||||
this._renderCachedSprite(renderSession);
|
||||
return;
|
||||
}
|
||||
|
||||
if(this._mask)
|
||||
{
|
||||
renderSession.maskManager.pushMask(this._mask, renderSession);
|
||||
}
|
||||
|
||||
for(var i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
var child = this.children[i];
|
||||
child._renderCanvas(renderSession);
|
||||
}
|
||||
|
||||
if(this._mask)
|
||||
{
|
||||
renderSession.maskManager.popMask(renderSession);
|
||||
}
|
||||
};
|
||||
205
app/Lib/Vendor/src/pixi/display/MovieClip.js
vendored
Normal file
205
app/Lib/Vendor/src/pixi/display/MovieClip.js
vendored
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
/**
|
||||
* @author Mat Groves http://matgroves.com/ @Doormat23
|
||||
*/
|
||||
|
||||
/**
|
||||
* A MovieClip is a simple way to display an animation depicted by a list of textures.
|
||||
*
|
||||
* @class MovieClip
|
||||
* @extends Sprite
|
||||
* @constructor
|
||||
* @param textures {Array(Texture)} an array of {Texture} objects that make up the animation
|
||||
*/
|
||||
PIXI.MovieClip = function(textures)
|
||||
{
|
||||
PIXI.Sprite.call(this, textures[0]);
|
||||
|
||||
/**
|
||||
* The array of textures that make up the animation
|
||||
*
|
||||
* @property textures
|
||||
* @type Array(Texture)
|
||||
*/
|
||||
this.textures = textures;
|
||||
|
||||
/**
|
||||
* The speed that the MovieClip will play at. Higher is faster, lower is slower
|
||||
*
|
||||
* @property animationSpeed
|
||||
* @type Number
|
||||
* @default 1
|
||||
*/
|
||||
this.animationSpeed = 1;
|
||||
|
||||
/**
|
||||
* Whether or not the movie clip repeats after playing.
|
||||
*
|
||||
* @property loop
|
||||
* @type Boolean
|
||||
* @default true
|
||||
*/
|
||||
this.loop = true;
|
||||
|
||||
/**
|
||||
* Function to call when a MovieClip finishes playing
|
||||
*
|
||||
* @property onComplete
|
||||
* @type Function
|
||||
*/
|
||||
this.onComplete = null;
|
||||
|
||||
/**
|
||||
* [read-only] The MovieClips current frame index (this may not have to be a whole number)
|
||||
*
|
||||
* @property currentFrame
|
||||
* @type Number
|
||||
* @default 0
|
||||
* @readOnly
|
||||
*/
|
||||
this.currentFrame = 0;
|
||||
|
||||
/**
|
||||
* [read-only] Indicates if the MovieClip is currently playing
|
||||
*
|
||||
* @property playing
|
||||
* @type Boolean
|
||||
* @readOnly
|
||||
*/
|
||||
this.playing = false;
|
||||
};
|
||||
|
||||
// constructor
|
||||
PIXI.MovieClip.prototype = Object.create( PIXI.Sprite.prototype );
|
||||
PIXI.MovieClip.prototype.constructor = PIXI.MovieClip;
|
||||
|
||||
/**
|
||||
* [read-only] totalFrames is the total number of frames in the MovieClip. This is the same as number of textures
|
||||
* assigned to the MovieClip.
|
||||
*
|
||||
* @property totalFrames
|
||||
* @type Number
|
||||
* @default 0
|
||||
* @readOnly
|
||||
*/
|
||||
Object.defineProperty( PIXI.MovieClip.prototype, 'totalFrames', {
|
||||
get: function() {
|
||||
|
||||
return this.textures.length;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Stops the MovieClip
|
||||
*
|
||||
* @method stop
|
||||
*/
|
||||
PIXI.MovieClip.prototype.stop = function()
|
||||
{
|
||||
this.playing = false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Plays the MovieClip
|
||||
*
|
||||
* @method play
|
||||
*/
|
||||
PIXI.MovieClip.prototype.play = function()
|
||||
{
|
||||
this.playing = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Stops the MovieClip and goes to a specific frame
|
||||
*
|
||||
* @method gotoAndStop
|
||||
* @param frameNumber {Number} frame index to stop at
|
||||
*/
|
||||
PIXI.MovieClip.prototype.gotoAndStop = function(frameNumber)
|
||||
{
|
||||
this.playing = false;
|
||||
this.currentFrame = frameNumber;
|
||||
var round = (this.currentFrame + 0.5) | 0;
|
||||
this.setTexture(this.textures[round % this.textures.length]);
|
||||
};
|
||||
|
||||
/**
|
||||
* Goes to a specific frame and begins playing the MovieClip
|
||||
*
|
||||
* @method gotoAndPlay
|
||||
* @param frameNumber {Number} frame index to start at
|
||||
*/
|
||||
PIXI.MovieClip.prototype.gotoAndPlay = function(frameNumber)
|
||||
{
|
||||
this.currentFrame = frameNumber;
|
||||
this.playing = true;
|
||||
};
|
||||
|
||||
/*
|
||||
* Updates the object transform for rendering
|
||||
*
|
||||
* @method updateTransform
|
||||
* @private
|
||||
*/
|
||||
PIXI.MovieClip.prototype.updateTransform = function()
|
||||
{
|
||||
this.displayObjectContainerUpdateTransform();
|
||||
|
||||
if(!this.playing)return;
|
||||
|
||||
this.currentFrame += this.animationSpeed;
|
||||
|
||||
var round = (this.currentFrame + 0.5) | 0;
|
||||
|
||||
this.currentFrame = this.currentFrame % this.textures.length;
|
||||
|
||||
if(this.loop || round < this.textures.length)
|
||||
{
|
||||
this.setTexture(this.textures[round % this.textures.length]);
|
||||
}
|
||||
else if(round >= this.textures.length)
|
||||
{
|
||||
this.gotoAndStop(this.textures.length - 1);
|
||||
if(this.onComplete)
|
||||
{
|
||||
this.onComplete();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* A short hand way of creating a movieclip from an array of frame ids
|
||||
*
|
||||
* @static
|
||||
* @method fromFrames
|
||||
* @param frames {Array} the array of frames ids the movieclip will use as its texture frames
|
||||
*/
|
||||
PIXI.MovieClip.fromFrames = function(frames)
|
||||
{
|
||||
var textures = [];
|
||||
|
||||
for (var i = 0; i < frames.length; i++)
|
||||
{
|
||||
textures.push(new PIXI.Texture.fromFrame(frames[i]));
|
||||
}
|
||||
|
||||
return new PIXI.MovieClip(textures);
|
||||
};
|
||||
|
||||
/**
|
||||
* A short hand way of creating a movieclip from an array of image ids
|
||||
*
|
||||
* @static
|
||||
* @method fromImages
|
||||
* @param frames {Array} the array of image ids the movieclip will use as its texture frames
|
||||
*/
|
||||
PIXI.MovieClip.fromImages = function(images)
|
||||
{
|
||||
var textures = [];
|
||||
|
||||
for (var i = 0; i < images.length; i++)
|
||||
{
|
||||
textures.push(new PIXI.Texture.fromImage(images[i]));
|
||||
}
|
||||
|
||||
return new PIXI.MovieClip(textures);
|
||||
};
|
||||
471
app/Lib/Vendor/src/pixi/display/Sprite.js
vendored
Normal file
471
app/Lib/Vendor/src/pixi/display/Sprite.js
vendored
Normal file
|
|
@ -0,0 +1,471 @@
|
|||
/**
|
||||
* @author Mat Groves http://matgroves.com/ @Doormat23
|
||||
*/
|
||||
|
||||
/**
|
||||
* The Sprite object is the base for all textured objects that are rendered to the screen
|
||||
*
|
||||
* @class Sprite
|
||||
* @extends DisplayObjectContainer
|
||||
* @constructor
|
||||
* @param texture {Texture} The texture for this sprite
|
||||
*
|
||||
* A sprite can be created directly from an image like this :
|
||||
* var sprite = new PIXI.Sprite.fromImage('assets/image.png');
|
||||
* yourStage.addChild(sprite);
|
||||
* then obviously don't forget to add it to the stage you have already created
|
||||
*/
|
||||
PIXI.Sprite = function(texture)
|
||||
{
|
||||
PIXI.DisplayObjectContainer.call( this );
|
||||
|
||||
/**
|
||||
* The anchor sets the origin point of the texture.
|
||||
* The default is 0,0 this means the texture's 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 corner
|
||||
*
|
||||
* @property anchor
|
||||
* @type Point
|
||||
*/
|
||||
this.anchor = new PIXI.Point();
|
||||
|
||||
/**
|
||||
* The texture that the sprite is using
|
||||
*
|
||||
* @property texture
|
||||
* @type Texture
|
||||
*/
|
||||
this.texture = texture || PIXI.Texture.emptyTexture;
|
||||
|
||||
/**
|
||||
* The width of the sprite (this is initially set by the texture)
|
||||
*
|
||||
* @property _width
|
||||
* @type Number
|
||||
* @private
|
||||
*/
|
||||
this._width = 0;
|
||||
|
||||
/**
|
||||
* The height of the sprite (this is initially set by the texture)
|
||||
*
|
||||
* @property _height
|
||||
* @type Number
|
||||
* @private
|
||||
*/
|
||||
this._height = 0;
|
||||
|
||||
/**
|
||||
* The tint applied to the sprite. This is a hex value. A value of 0xFFFFFF will remove any tint effect.
|
||||
*
|
||||
* @property tint
|
||||
* @type Number
|
||||
* @default 0xFFFFFF
|
||||
*/
|
||||
this.tint = 0xFFFFFF;
|
||||
|
||||
/**
|
||||
* The blend mode to be applied to the sprite. Set to PIXI.blendModes.NORMAL to remove any blend mode.
|
||||
*
|
||||
* @property blendMode
|
||||
* @type Number
|
||||
* @default PIXI.blendModes.NORMAL;
|
||||
*/
|
||||
this.blendMode = PIXI.blendModes.NORMAL;
|
||||
|
||||
/**
|
||||
* The shader that will be used to render the texture to the stage. Set to null to remove a current shader.
|
||||
*
|
||||
* @property shader
|
||||
* @type AbstractFilter
|
||||
* @default null
|
||||
*/
|
||||
this.shader = null;
|
||||
|
||||
if(this.texture.baseTexture.hasLoaded)
|
||||
{
|
||||
this.onTextureUpdate();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.texture.on( 'update', this.onTextureUpdate.bind(this) );
|
||||
}
|
||||
|
||||
this.renderable = true;
|
||||
|
||||
};
|
||||
|
||||
// constructor
|
||||
PIXI.Sprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
|
||||
PIXI.Sprite.prototype.constructor = PIXI.Sprite;
|
||||
|
||||
/**
|
||||
* The width of the sprite, setting this will actually modify the scale to achieve the value set
|
||||
*
|
||||
* @property width
|
||||
* @type Number
|
||||
*/
|
||||
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;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* The height of the sprite, setting this will actually modify the scale to achieve the value set
|
||||
*
|
||||
* @property height
|
||||
* @type Number
|
||||
*/
|
||||
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;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Sets the texture of the sprite
|
||||
*
|
||||
* @method setTexture
|
||||
* @param texture {Texture} The PIXI texture that is displayed by the sprite
|
||||
*/
|
||||
PIXI.Sprite.prototype.setTexture = function(texture)
|
||||
{
|
||||
this.texture = texture;
|
||||
this.cachedTint = 0xFFFFFF;
|
||||
};
|
||||
|
||||
/**
|
||||
* When the texture is updated, this event will fire to update the scale and frame
|
||||
*
|
||||
* @method onTextureUpdate
|
||||
* @param event
|
||||
* @private
|
||||
*/
|
||||
PIXI.Sprite.prototype.onTextureUpdate = function()
|
||||
{
|
||||
// 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;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the bounds of the Sprite as a rectangle. The bounds calculation takes the worldTransform into account.
|
||||
*
|
||||
* @method getBounds
|
||||
* @param matrix {Matrix} the transformation matrix of the sprite
|
||||
* @return {Rectangle} the framing rectangle
|
||||
*/
|
||||
PIXI.Sprite.prototype.getBounds = function(matrix)
|
||||
{
|
||||
var width = this.texture.frame.width;
|
||||
var height = this.texture.frame.height;
|
||||
|
||||
var w0 = width * (1-this.anchor.x);
|
||||
var w1 = width * -this.anchor.x;
|
||||
|
||||
var h0 = height * (1-this.anchor.y);
|
||||
var h1 = height * -this.anchor.y;
|
||||
|
||||
var worldTransform = matrix || this.worldTransform ;
|
||||
|
||||
var a = worldTransform.a;
|
||||
var b = worldTransform.b;
|
||||
var c = worldTransform.c;
|
||||
var d = worldTransform.d;
|
||||
var tx = worldTransform.tx;
|
||||
var ty = worldTransform.ty;
|
||||
|
||||
var maxX = -Infinity;
|
||||
var maxY = -Infinity;
|
||||
|
||||
var minX = Infinity;
|
||||
var minY = Infinity;
|
||||
|
||||
if(b === 0 && c === 0)
|
||||
{
|
||||
// scale may be negative!
|
||||
if(a < 0)a *= -1;
|
||||
if(d < 0)d *= -1;
|
||||
|
||||
// this means there is no rotation going on right? RIGHT?
|
||||
// if thats the case then we can avoid checking the bound values! yay
|
||||
minX = a * w1 + tx;
|
||||
maxX = a * w0 + tx;
|
||||
minY = d * h1 + ty;
|
||||
maxY = d * h0 + ty;
|
||||
}
|
||||
else
|
||||
{
|
||||
var x1 = a * w1 + c * h1 + tx;
|
||||
var y1 = d * h1 + b * w1 + ty;
|
||||
|
||||
var x2 = a * w0 + c * h1 + tx;
|
||||
var y2 = d * h1 + b * w0 + ty;
|
||||
|
||||
var x3 = a * w0 + c * h0 + tx;
|
||||
var y3 = d * h0 + b * w0 + ty;
|
||||
|
||||
var x4 = a * w1 + c * h0 + tx;
|
||||
var y4 = d * h0 + b * w1 + ty;
|
||||
|
||||
minX = x1 < minX ? x1 : minX;
|
||||
minX = x2 < minX ? x2 : minX;
|
||||
minX = x3 < minX ? x3 : minX;
|
||||
minX = x4 < minX ? x4 : minX;
|
||||
|
||||
minY = y1 < minY ? y1 : minY;
|
||||
minY = y2 < minY ? y2 : minY;
|
||||
minY = y3 < minY ? y3 : minY;
|
||||
minY = y4 < minY ? y4 : minY;
|
||||
|
||||
maxX = x1 > maxX ? x1 : maxX;
|
||||
maxX = x2 > maxX ? x2 : maxX;
|
||||
maxX = x3 > maxX ? x3 : maxX;
|
||||
maxX = x4 > maxX ? x4 : maxX;
|
||||
|
||||
maxY = y1 > maxY ? y1 : maxY;
|
||||
maxY = y2 > maxY ? y2 : maxY;
|
||||
maxY = y3 > maxY ? y3 : maxY;
|
||||
maxY = y4 > maxY ? y4 : maxY;
|
||||
}
|
||||
|
||||
var bounds = this._bounds;
|
||||
|
||||
bounds.x = minX;
|
||||
bounds.width = maxX - minX;
|
||||
|
||||
bounds.y = minY;
|
||||
bounds.height = maxY - minY;
|
||||
|
||||
// store a reference so that if this function gets called again in the render cycle we do not have to recalculate
|
||||
this._currentBounds = bounds;
|
||||
|
||||
return bounds;
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the object using the WebGL renderer
|
||||
*
|
||||
* @method _renderWebGL
|
||||
* @param renderSession {RenderSession}
|
||||
* @private
|
||||
*/
|
||||
PIXI.Sprite.prototype._renderWebGL = function(renderSession)
|
||||
{
|
||||
// if the sprite is not visible or the alpha is 0 then no need to render this element
|
||||
if(!this.visible || this.alpha <= 0)return;
|
||||
|
||||
var i,j;
|
||||
|
||||
// do a quick check to see if this element has a mask or a filter.
|
||||
if(this._mask || this._filters)
|
||||
{
|
||||
var spriteBatch = renderSession.spriteBatch;
|
||||
|
||||
// push filter first as we need to ensure the stencil buffer is correct for any masking
|
||||
if(this._filters)
|
||||
{
|
||||
spriteBatch.flush();
|
||||
renderSession.filterManager.pushFilter(this._filterBlock);
|
||||
}
|
||||
|
||||
if(this._mask)
|
||||
{
|
||||
spriteBatch.stop();
|
||||
renderSession.maskManager.pushMask(this.mask, renderSession);
|
||||
spriteBatch.start();
|
||||
}
|
||||
|
||||
// add this sprite to the batch
|
||||
spriteBatch.render(this);
|
||||
|
||||
// now loop through the children and make sure they get rendered
|
||||
for(i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
this.children[i]._renderWebGL(renderSession);
|
||||
}
|
||||
|
||||
// time to stop the sprite batch as either a mask element or a filter draw will happen next
|
||||
spriteBatch.stop();
|
||||
|
||||
if(this._mask)renderSession.maskManager.popMask(this._mask, renderSession);
|
||||
if(this._filters)renderSession.filterManager.popFilter();
|
||||
|
||||
spriteBatch.start();
|
||||
}
|
||||
else
|
||||
{
|
||||
renderSession.spriteBatch.render(this);
|
||||
|
||||
// simple render children!
|
||||
for(i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
this.children[i]._renderWebGL(renderSession);
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the object using the Canvas renderer
|
||||
*
|
||||
* @method _renderCanvas
|
||||
* @param renderSession {RenderSession}
|
||||
* @private
|
||||
*/
|
||||
PIXI.Sprite.prototype._renderCanvas = function(renderSession)
|
||||
{
|
||||
// If the sprite is not visible or the alpha is 0 then no need to render this element
|
||||
if (this.visible === false || this.alpha === 0 || this.texture.crop.width <= 0 || this.texture.crop.height <= 0) return;
|
||||
|
||||
if (this.blendMode !== renderSession.currentBlendMode)
|
||||
{
|
||||
renderSession.currentBlendMode = this.blendMode;
|
||||
renderSession.context.globalCompositeOperation = PIXI.blendModesCanvas[renderSession.currentBlendMode];
|
||||
}
|
||||
|
||||
if (this._mask)
|
||||
{
|
||||
renderSession.maskManager.pushMask(this._mask, renderSession);
|
||||
}
|
||||
|
||||
// Ignore null sources
|
||||
if (this.texture.valid)
|
||||
{
|
||||
var resolution = this.texture.baseTexture.resolution / renderSession.resolution;
|
||||
|
||||
renderSession.context.globalAlpha = this.worldAlpha;
|
||||
|
||||
// If smoothingEnabled is supported and we need to change the smoothing property for this texture
|
||||
if (renderSession.smoothProperty && renderSession.scaleMode !== this.texture.baseTexture.scaleMode)
|
||||
{
|
||||
renderSession.scaleMode = this.texture.baseTexture.scaleMode;
|
||||
renderSession.context[renderSession.smoothProperty] = (renderSession.scaleMode === PIXI.scaleModes.LINEAR);
|
||||
}
|
||||
|
||||
// If the texture is trimmed we offset by the trim x/y, otherwise we use the frame dimensions
|
||||
var dx = (this.texture.trim) ? this.texture.trim.x - this.anchor.x * this.texture.trim.width : this.anchor.x * -this.texture.frame.width;
|
||||
var dy = (this.texture.trim) ? this.texture.trim.y - this.anchor.y * this.texture.trim.height : this.anchor.y * -this.texture.frame.height;
|
||||
|
||||
// Allow for pixel rounding
|
||||
if (renderSession.roundPixels)
|
||||
{
|
||||
renderSession.context.setTransform(
|
||||
this.worldTransform.a,
|
||||
this.worldTransform.b,
|
||||
this.worldTransform.c,
|
||||
this.worldTransform.d,
|
||||
(this.worldTransform.tx * renderSession.resolution) | 0,
|
||||
(this.worldTransform.ty * renderSession.resolution) | 0);
|
||||
|
||||
dx = dx | 0;
|
||||
dy = dy | 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
renderSession.context.setTransform(
|
||||
this.worldTransform.a,
|
||||
this.worldTransform.b,
|
||||
this.worldTransform.c,
|
||||
this.worldTransform.d,
|
||||
this.worldTransform.tx * renderSession.resolution,
|
||||
this.worldTransform.ty * renderSession.resolution);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (this.tint !== 0xFFFFFF)
|
||||
{
|
||||
if (this.cachedTint !== this.tint)
|
||||
{
|
||||
this.cachedTint = this.tint;
|
||||
|
||||
// TODO clean up caching - how to clean up the caches?
|
||||
this.tintedTexture = PIXI.CanvasTinter.getTintedTexture(this, this.tint);
|
||||
}
|
||||
|
||||
renderSession.context.drawImage(
|
||||
this.tintedTexture,
|
||||
0,
|
||||
0,
|
||||
this.texture.crop.width,
|
||||
this.texture.crop.height,
|
||||
dx / resolution,
|
||||
dy / resolution,
|
||||
this.texture.crop.width / resolution,
|
||||
this.texture.crop.height / resolution);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderSession.context.drawImage(
|
||||
this.texture.baseTexture.source,
|
||||
this.texture.crop.x,
|
||||
this.texture.crop.y,
|
||||
this.texture.crop.width,
|
||||
this.texture.crop.height,
|
||||
dx / resolution,
|
||||
dy / resolution,
|
||||
this.texture.crop.width / resolution,
|
||||
this.texture.crop.height / resolution);
|
||||
}
|
||||
}
|
||||
|
||||
// OVERWRITE
|
||||
for (var i = 0, j = this.children.length; i < j; i++)
|
||||
{
|
||||
this.children[i]._renderCanvas(renderSession);
|
||||
}
|
||||
|
||||
if (this._mask)
|
||||
{
|
||||
renderSession.maskManager.popMask(renderSession);
|
||||
}
|
||||
};
|
||||
|
||||
// some helper functions..
|
||||
|
||||
/**
|
||||
*
|
||||
* Helper function that creates a sprite that will contain a texture from the TextureCache based on the frameId
|
||||
* The frame ids are created when a Texture packer file has been loaded
|
||||
*
|
||||
* @method fromFrame
|
||||
* @static
|
||||
* @param frameId {String} The frame Id of the texture in the cache
|
||||
* @return {Sprite} A new Sprite using a texture from the texture cache matching the frameId
|
||||
*/
|
||||
PIXI.Sprite.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 new PIXI.Sprite(texture);
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* Helper function that creates a sprite that will contain a texture based on an image url
|
||||
* If the image is not in the texture cache it will be loaded
|
||||
*
|
||||
* @method fromImage
|
||||
* @static
|
||||
* @param imageId {String} The image url of the texture
|
||||
* @return {Sprite} A new Sprite using a texture from the texture cache matching the image id
|
||||
*/
|
||||
PIXI.Sprite.fromImage = function(imageId, crossorigin, scaleMode)
|
||||
{
|
||||
var texture = PIXI.Texture.fromImage(imageId, crossorigin, scaleMode);
|
||||
return new PIXI.Sprite(texture);
|
||||
};
|
||||
177
app/Lib/Vendor/src/pixi/display/SpriteBatch.js
vendored
Normal file
177
app/Lib/Vendor/src/pixi/display/SpriteBatch.js
vendored
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
/**
|
||||
* @author Mat Groves http://matgroves.com/
|
||||
*/
|
||||
|
||||
/**
|
||||
* The SpriteBatch class is a really fast version of the DisplayObjectContainer
|
||||
* built solely for speed, so use when you need a lot of sprites or particles.
|
||||
* And it's extremely easy to use :
|
||||
|
||||
var container = new PIXI.SpriteBatch();
|
||||
|
||||
stage.addChild(container);
|
||||
|
||||
for(var i = 0; i < 100; i++)
|
||||
{
|
||||
var sprite = new PIXI.Sprite.fromImage("myImage.png");
|
||||
container.addChild(sprite);
|
||||
}
|
||||
* And here you have a hundred sprites that will be renderer at the speed of light
|
||||
*
|
||||
* @class SpriteBatch
|
||||
* @constructor
|
||||
* @param texture {Texture}
|
||||
*/
|
||||
|
||||
//TODO RENAME to PARTICLE CONTAINER?
|
||||
PIXI.SpriteBatch = function(texture)
|
||||
{
|
||||
PIXI.DisplayObjectContainer.call( this);
|
||||
|
||||
this.textureThing = texture;
|
||||
|
||||
this.ready = false;
|
||||
};
|
||||
|
||||
PIXI.SpriteBatch.prototype = Object.create(PIXI.DisplayObjectContainer.prototype);
|
||||
PIXI.SpriteBatch.prototype.constructor = PIXI.SpriteBatch;
|
||||
|
||||
/*
|
||||
* Initialises the spriteBatch
|
||||
*
|
||||
* @method initWebGL
|
||||
* @param gl {WebGLContext} the current WebGL drawing context
|
||||
*/
|
||||
PIXI.SpriteBatch.prototype.initWebGL = function(gl)
|
||||
{
|
||||
// TODO only one needed for the whole engine really?
|
||||
this.fastSpriteBatch = new PIXI.WebGLFastSpriteBatch(gl);
|
||||
|
||||
this.ready = true;
|
||||
};
|
||||
|
||||
/*
|
||||
* Updates the object transform for rendering
|
||||
*
|
||||
* @method updateTransform
|
||||
* @private
|
||||
*/
|
||||
PIXI.SpriteBatch.prototype.updateTransform = function()
|
||||
{
|
||||
// TODO don't need to!
|
||||
this.displayObjectUpdateTransform();
|
||||
// PIXI.DisplayObjectContainer.prototype.updateTransform.call( this );
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the object using the WebGL renderer
|
||||
*
|
||||
* @method _renderWebGL
|
||||
* @param renderSession {RenderSession}
|
||||
* @private
|
||||
*/
|
||||
PIXI.SpriteBatch.prototype._renderWebGL = function(renderSession)
|
||||
{
|
||||
if(!this.visible || this.alpha <= 0 || !this.children.length)return;
|
||||
|
||||
if(!this.ready)this.initWebGL( renderSession.gl );
|
||||
|
||||
renderSession.spriteBatch.stop();
|
||||
|
||||
renderSession.shaderManager.setShader(renderSession.shaderManager.fastShader);
|
||||
|
||||
this.fastSpriteBatch.begin(this, renderSession);
|
||||
this.fastSpriteBatch.render(this);
|
||||
|
||||
renderSession.spriteBatch.start();
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the object using the Canvas renderer
|
||||
*
|
||||
* @method _renderCanvas
|
||||
* @param renderSession {RenderSession}
|
||||
* @private
|
||||
*/
|
||||
PIXI.SpriteBatch.prototype._renderCanvas = function(renderSession)
|
||||
{
|
||||
if(!this.visible || this.alpha <= 0 || !this.children.length)return;
|
||||
|
||||
var context = renderSession.context;
|
||||
context.globalAlpha = this.worldAlpha;
|
||||
|
||||
this.displayObjectUpdateTransform();
|
||||
|
||||
var transform = this.worldTransform;
|
||||
// alow for trimming
|
||||
|
||||
var isRotated = true;
|
||||
|
||||
for (var i = 0; i < this.children.length; i++) {
|
||||
|
||||
var child = this.children[i];
|
||||
|
||||
if(!child.visible)continue;
|
||||
|
||||
var texture = child.texture;
|
||||
var frame = texture.frame;
|
||||
|
||||
context.globalAlpha = this.worldAlpha * child.alpha;
|
||||
|
||||
if(child.rotation % (Math.PI * 2) === 0)
|
||||
{
|
||||
if(isRotated)
|
||||
{
|
||||
context.setTransform(transform.a, transform.b, transform.c, transform.d, transform.tx, transform.ty);
|
||||
isRotated = false;
|
||||
}
|
||||
|
||||
// this is the fastest way to optimise! - if rotation is 0 then we can avoid any kind of setTransform call
|
||||
context.drawImage(texture.baseTexture.source,
|
||||
frame.x,
|
||||
frame.y,
|
||||
frame.width,
|
||||
frame.height,
|
||||
((child.anchor.x) * (-frame.width * child.scale.x) + child.position.x + 0.5) | 0,
|
||||
((child.anchor.y) * (-frame.height * child.scale.y) + child.position.y + 0.5) | 0,
|
||||
frame.width * child.scale.x,
|
||||
frame.height * child.scale.y);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!isRotated)isRotated = true;
|
||||
|
||||
child.displayObjectUpdateTransform();
|
||||
|
||||
var childTransform = child.worldTransform;
|
||||
|
||||
// allow for trimming
|
||||
|
||||
if (renderSession.roundPixels)
|
||||
{
|
||||
context.setTransform(childTransform.a, childTransform.b, childTransform.c, childTransform.d, childTransform.tx | 0, childTransform.ty | 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
context.setTransform(childTransform.a, childTransform.b, childTransform.c, childTransform.d, childTransform.tx, childTransform.ty);
|
||||
}
|
||||
|
||||
context.drawImage(texture.baseTexture.source,
|
||||
frame.x,
|
||||
frame.y,
|
||||
frame.width,
|
||||
frame.height,
|
||||
((child.anchor.x) * (-frame.width) + 0.5) | 0,
|
||||
((child.anchor.y) * (-frame.height) + 0.5) | 0,
|
||||
frame.width,
|
||||
frame.height);
|
||||
|
||||
|
||||
}
|
||||
|
||||
// context.restore();
|
||||
}
|
||||
|
||||
// context.restore();
|
||||
};
|
||||
135
app/Lib/Vendor/src/pixi/display/Stage.js
vendored
Normal file
135
app/Lib/Vendor/src/pixi/display/Stage.js
vendored
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
/**
|
||||
* @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, you have to pass this in is in hex format
|
||||
* like: 0xFFFFFF for white
|
||||
*
|
||||
* Creating a stage is a mandatory process when you use Pixi, which is as simple as this :
|
||||
* var stage = new PIXI.Stage(0xFFFFFF);
|
||||
* where the parameter given is the background colour of the stage, in hex
|
||||
* you will use this stage instance to add your sprites to it and therefore to the renderer
|
||||
* Here is how to add a sprite to the stage :
|
||||
* stage.addChild(sprite);
|
||||
*/
|
||||
PIXI.Stage = function(backgroundColor)
|
||||
{
|
||||
PIXI.DisplayObjectContainer.call( this );
|
||||
|
||||
/**
|
||||
* [read-only] Current transform of the object based on world (parent) factors
|
||||
*
|
||||
* @property worldTransform
|
||||
* @type Matrix
|
||||
* @readOnly
|
||||
* @private
|
||||
*/
|
||||
this.worldTransform = new PIXI.Matrix();
|
||||
|
||||
/**
|
||||
* Whether or not the stage is interactive
|
||||
*
|
||||
* @property interactive
|
||||
* @type Boolean
|
||||
*/
|
||||
this.interactive = true;
|
||||
|
||||
/**
|
||||
* The interaction manage for this stage, manages all interactive activity on the stage
|
||||
*
|
||||
* @property interactionManager
|
||||
* @type InteractionManager
|
||||
*/
|
||||
this.interactionManager = new PIXI.InteractionManager(this);
|
||||
|
||||
/**
|
||||
* Whether the stage is dirty and needs to have interactions updated
|
||||
*
|
||||
* @property dirty
|
||||
* @type Boolean
|
||||
* @private
|
||||
*/
|
||||
this.dirty = true;
|
||||
|
||||
//the stage is its own stage
|
||||
this.stage = this;
|
||||
|
||||
//optimize hit detection a bit
|
||||
this.stage.hitArea = new PIXI.Rectangle(0, 0, 100000, 100000);
|
||||
|
||||
this.setBackgroundColor(backgroundColor);
|
||||
};
|
||||
|
||||
// constructor
|
||||
PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
|
||||
PIXI.Stage.prototype.constructor = PIXI.Stage;
|
||||
|
||||
/**
|
||||
* Sets another DOM element which can receive mouse/touch interactions instead of the default Canvas element.
|
||||
* This is useful for when you have other DOM elements on top of the Canvas element.
|
||||
*
|
||||
* @method setInteractionDelegate
|
||||
* @param domElement {DOMElement} This new domElement which will receive mouse/touch events
|
||||
*/
|
||||
PIXI.Stage.prototype.setInteractionDelegate = function(domElement)
|
||||
{
|
||||
this.interactionManager.setTargetDomElement( domElement );
|
||||
};
|
||||
|
||||
/*
|
||||
* Updates the object transform for rendering
|
||||
*
|
||||
* @method updateTransform
|
||||
* @private
|
||||
*/
|
||||
PIXI.Stage.prototype.updateTransform = function()
|
||||
{
|
||||
this.worldAlpha = 1;
|
||||
|
||||
for(var i=0,j=this.children.length; i<j; i++)
|
||||
{
|
||||
this.children[i].updateTransform();
|
||||
}
|
||||
|
||||
if(this.dirty)
|
||||
{
|
||||
this.dirty = false;
|
||||
// update interactive!
|
||||
this.interactionManager.dirty = true;
|
||||
}
|
||||
|
||||
if(this.interactive)this.interactionManager.update();
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the background color for the stage
|
||||
*
|
||||
* @method setBackgroundColor
|
||||
* @param backgroundColor {Number} the color of the background, easiest way to pass this in is in hex format
|
||||
* like: 0xFFFFFF for white
|
||||
*/
|
||||
PIXI.Stage.prototype.setBackgroundColor = function(backgroundColor)
|
||||
{
|
||||
this.backgroundColor = backgroundColor || 0x000000;
|
||||
this.backgroundColorSplit = PIXI.hex2rgb(this.backgroundColor);
|
||||
var hex = this.backgroundColor.toString(16);
|
||||
hex = '000000'.substr(0, 6 - hex.length) + hex;
|
||||
this.backgroundColorString = '#' + hex;
|
||||
};
|
||||
|
||||
/**
|
||||
* This will return the point containing global coordinates of the mouse.
|
||||
*
|
||||
* @method getMousePosition
|
||||
* @return {Point} A point containing the coordinates of the global InteractionData position.
|
||||
*/
|
||||
PIXI.Stage.prototype.getMousePosition = function()
|
||||
{
|
||||
return this.interactionManager.mouse.global;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue