//-----------------------------------------------------------------------------
/**
* The sprite object for a tiling image.
*
* @class
* @extends PIXI.TilingSprite
* @param {Bitmap} bitmap - The image for the tiling sprite.
*/
function TilingSprite() {
this.initialize(...arguments);
}
TilingSprite.prototype = Object.create(PIXI.TilingSprite.prototype);
TilingSprite.prototype.constructor = TilingSprite;
TilingSprite.prototype.initialize = function(bitmap) {
if (!TilingSprite._emptyBaseTexture) {
TilingSprite._emptyBaseTexture = new PIXI.BaseTexture();
TilingSprite._emptyBaseTexture.setSize(1, 1);
}
const frame = new Rectangle();
const texture = new PIXI.Texture(TilingSprite._emptyBaseTexture, frame);
PIXI.TilingSprite.call(this, texture);
this._bitmap = bitmap;
this._width = 0;
this._height = 0;
this._frame = frame;
/**
* The origin point of the tiling sprite for scrolling.
*
* @type Point
*/
this.origin = new Point();
this._onBitmapChange();
};
TilingSprite._emptyBaseTexture = null;
/**
* The image for the tiling sprite.
*
* @type Bitmap
* @name TilingSprite#bitmap
*/
Object.defineProperty(TilingSprite.prototype, "bitmap", {
get: function() {
return this._bitmap;
},
set: function(value) {
if (this._bitmap !== value) {
this._bitmap = value;
this._onBitmapChange();
}
},
configurable: true
});
/**
* The opacity of the tiling sprite (0 to 255).
*
* @type number
* @name TilingSprite#opacity
*/
Object.defineProperty(TilingSprite.prototype, "opacity", {
get: function() {
return this.alpha * 255;
},
set: function(value) {
this.alpha = value.clamp(0, 255) / 255;
},
configurable: true
});
/**
* Destroys the tiling sprite.
*/
TilingSprite.prototype.destroy = function() {
const options = { children: true, texture: true };
PIXI.TilingSprite.prototype.destroy.call(this, options);
};
/**
* Updates the tiling sprite for each frame.
*/
TilingSprite.prototype.update = function() {
for (const child of this.children) {
if (child.update) {
child.update();
}
}
};
/**
* Sets the x, y, width, and height all at once.
*
* @param {number} x - The x coordinate of the tiling sprite.
* @param {number} y - The y coordinate of the tiling sprite.
* @param {number} width - The width of the tiling sprite.
* @param {number} height - The height of the tiling sprite.
*/
TilingSprite.prototype.move = function(x, y, width, height) {
this.x = x || 0;
this.y = y || 0;
this._width = width || 0;
this._height = height || 0;
};
/**
* Specifies the region of the image that the tiling sprite will use.
*
* @param {number} x - The x coordinate of the frame.
* @param {number} y - The y coordinate of the frame.
* @param {number} width - The width of the frame.
* @param {number} height - The height of the frame.
*/
TilingSprite.prototype.setFrame = function(x, y, width, height) {
this._frame.x = x;
this._frame.y = y;
this._frame.width = width;
this._frame.height = height;
this._refresh();
};
/**
* Updates the transform on all children of this container for rendering.
*/
TilingSprite.prototype.updateTransform = function() {
this.tilePosition.x = Math.round(-this.origin.x);
this.tilePosition.y = Math.round(-this.origin.y);
PIXI.TilingSprite.prototype.updateTransform.call(this);
};
TilingSprite.prototype._onBitmapChange = function() {
if (this._bitmap) {
this._bitmap.addLoadListener(this._onBitmapLoad.bind(this));
} else {
this.texture.frame = new Rectangle();
}
};
TilingSprite.prototype._onBitmapLoad = function() {
this.texture.baseTexture = this._bitmap.baseTexture;
this._refresh();
};
TilingSprite.prototype._refresh = function() {
const texture = this.texture;
const frame = this._frame.clone();
if (frame.width === 0 && frame.height === 0 && this._bitmap) {
frame.width = this._bitmap.width;
frame.height = this._bitmap.height;
}
if (texture) {
if (texture.baseTexture) {
try {
texture.frame = frame;
} catch (e) {
texture.frame = new Rectangle();
}
}
texture._updateID++;
}
};