phaser4-rex-plugins
Version:
105 lines (83 loc) • 2.6 kB
JavaScript
const TransformMatrix = Phaser.GameObjects.Components.TransformMatrix;
const GetTint = Phaser.Renderer.WebGL.Utils.getTintAppendFloatAlpha;
var tempMatrix = new TransformMatrix();
var tempTransformer = {
quad: new Float32Array(8)
};
var tempTexturer = {};
var tempTinter = {};
var WebglRender = function (Submitter, drawingContext, parentMatrix, calcMatrix, alpha, dx, dy) {
var frame = this.frame;
if (!frame) {
return;
}
var width = this._width,
height = this._height;
var displayOriginX = width * this.originX,
displayOriginY = height * this.originY;
var x = this.x - dx,
y = this.y - dy;
var u0, v0, u1, v1;
var frameX, frameY;
var frameWidth, frameHeight;
if (this.isCropped) {
var crop = this._crop;
if (crop.flipX !== this.flipX || crop.flipY !== this.flipY) {
frame.updateCropUVs(crop, this.flipX, this.flipY);
}
u0 = crop.u0;
v0 = crop.v0;
u1 = crop.u1;
v1 = crop.v1;
frameWidth = crop.width;
frameHeight = crop.height;
frameX = crop.x;
frameY = crop.y;
} else {
u0 = this.frame.u0;
v0 = this.frame.v0;
u1 = this.frame.u1;
v1 = this.frame.v1;
frameWidth = width;
frameHeight = height;
frameX = 0;
frameY = 0;
}
var flipX = 1;
var flipY = 1;
if (this.flipX) {
x += width - (displayOriginX * 2);
flipX = -1;
}
if (this.flipY) {
y += height - (displayOriginY * 2);
flipY = -1;
}
tempMatrix.applyITRS(x, y, this.rotation, this.scaleX * flipX, this.scaleY * flipY);
calcMatrix.multiply(tempMatrix, tempMatrix);
var tx = -displayOriginX + frameX;
var ty = -displayOriginY + frameY;
var tw = tx + frameWidth;
var th = ty + frameHeight;
tempMatrix.setQuad(tx, ty, tw, th, tempTransformer.quad);
tempTexturer.frame = frame;
tempTexturer.uvSource = frame;
var tint = GetTint(this.tint, this.alpha * alpha);
tempTinter.tintTopLeft = tint;
tempTinter.tintBottomLeft = tint;
tempTinter.tintTopRight = tint;
tempTinter.tintBottomRight = tint;
Submitter.run(
drawingContext,
this.parent,
parentMatrix,
0,
tempTexturer,
tempTransformer,
tempTinter,
// Optional normal map parameters.
undefined,
0
);
}
export default WebglRender;