UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers.

80 lines (66 loc) 3.18 kB
/** * @author Richard Davey <rich@photonstorm.com> * @copyright 2019 Photon Storm Ltd. * @license {@link https://opensource.org/licenses/MIT|MIT License} */ /** * Takes a reference to the Canvas Renderer, a Canvas Rendering Context, a Game Object, a Camera and a parent matrix * and then performs the following steps: * * 1. Checks the alpha of the source combined with the Camera alpha. If 0 or less it aborts. * 2. Takes the Camera and Game Object matrix and multiplies them, combined with the parent matrix if given. * 3. Sets the blend mode of the context to be that used by the Game Object. * 4. Sets the alpha value of the context to be that used by the Game Object combined with the Camera. * 5. Saves the context state. * 6. Sets the final matrix values into the context via setTransform. * * This function is only meant to be used internally. Most of the Canvas Renderer classes use it. * * @function Phaser.Renderer.Canvas.SetTransform * @since 3.12.0 * * @param {Phaser.Renderer.Canvas.CanvasRenderer} renderer - A reference to the current active Canvas renderer. * @param {CanvasRenderingContext2D} ctx - The canvas context to set the transform on. * @param {Phaser.GameObjects.GameObject} src - The Game Object being rendered. Can be any type that extends the base class. * @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object. * @param {Phaser.GameObjects.Components.TransformMatrix} [parentMatrix] - A parent transform matrix to apply to the Game Object before rendering. * * @return {boolean} `true` if the Game Object context was set, otherwise `false`. */ var SetTransform = function (renderer, ctx, src, camera, parentMatrix) { var alpha = camera.alpha * src.alpha; if (alpha <= 0) { // Nothing to see, so don't waste time calculating stuff return false; } var camMatrix = renderer._tempMatrix1.copyFromArray(camera.matrix.matrix); var gameObjectMatrix = renderer._tempMatrix2.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY); var calcMatrix = renderer._tempMatrix3; if (parentMatrix) { // Multiply the camera by the parent matrix camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY); // Undo the camera scroll gameObjectMatrix.e = src.x; gameObjectMatrix.f = src.y; // Multiply by the Sprite matrix, store result in calcMatrix camMatrix.multiply(gameObjectMatrix, calcMatrix); } else { gameObjectMatrix.e -= camera.scrollX * src.scrollFactorX; gameObjectMatrix.f -= camera.scrollY * src.scrollFactorY; // Multiply by the Sprite matrix, store result in calcMatrix camMatrix.multiply(gameObjectMatrix, calcMatrix); } // Blend Mode ctx.globalCompositeOperation = renderer.blendModes[src.blendMode]; // Alpha ctx.globalAlpha = alpha; ctx.save(); calcMatrix.setToContext(ctx); return true; }; module.exports = SetTransform;