/** * @author Richard Davey * @copyright 2018 Photon Storm Ltd. * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ var Clamp = require('../../math/Clamp'); // bitmask flag for GameObject.renderMask var _FLAG = 2; // 0010 /** * Provides methods used for setting the alpha properties of a Game Object. * Should be applied as a mixin and not used directly. * * @name Phaser.GameObjects.Components.Alpha * @since 3.0.0 */ var Alpha = { /** * Private internal value. Holds the global alpha value. * * @name Phaser.GameObjects.Components.Alpha#_alpha * @type {float} * @private * @default 1 * @since 3.0.0 */ _alpha: 1, /** * Private internal value. Holds the top-left alpha value. * * @name Phaser.GameObjects.Components.Alpha#_alphaTL * @type {float} * @private * @default 1 * @since 3.0.0 */ _alphaTL: 1, /** * Private internal value. Holds the top-right alpha value. * * @name Phaser.GameObjects.Components.Alpha#_alphaTR * @type {float} * @private * @default 1 * @since 3.0.0 */ _alphaTR: 1, /** * Private internal value. Holds the bottom-left alpha value. * * @name Phaser.GameObjects.Components.Alpha#_alphaBL * @type {float} * @private * @default 1 * @since 3.0.0 */ _alphaBL: 1, /** * Private internal value. Holds the bottom-right alpha value. * * @name Phaser.GameObjects.Components.Alpha#_alphaBR * @type {float} * @private * @default 1 * @since 3.0.0 */ _alphaBR: 1, /** * Clears all alpha values associated with this Game Object. * Immediately sets the alpha levels back to 1 (fully opaque) * * @method Phaser.GameObjects.Components.Alpha#clearAlpha * @since 3.0.0 * * @return {Phaser.GameObjects.GameObject} This Game Object instance. */ clearAlpha: function () { return this.setAlpha(1); }, /** * Set the Alpha level of this Game Object. The alpha controls the opacity of the Game Object as it renders. * Alpha values are provided as a float between 0, fully transparent, and 1, fully opaque. * * If your game is running under WebGL you can optionally specify four different alpha values, each of which * correspond to the four corners of the Game Object. Under Canvas only the `topLeft` value given is used. * * @method Phaser.GameObjects.Components.Alpha#setAlpha * @since 3.0.0 * * @param {float} [topLeft=1] - The alpha value used for the top-left of the Game Object. If this is the only value given it's applied across the whole Game Object. * @param {float} [topRight] - The alpha value used for the top-right of the Game Object. WebGL only. * @param {float} [bottomLeft] - The alpha value used for the bottom-left of the Game Object. WebGL only. * @param {float} [bottomRight] - The alpha value used for the bottom-right of the Game Object. WebGL only. * * @return {Phaser.GameObjects.GameObject} This Game Object instance. */ setAlpha: function (topLeft, topRight, bottomLeft, bottomRight) { if (topLeft === undefined) { topLeft = 1; } // Treat as if there is only one alpha value for the whole Game Object if (topRight === undefined) { this.alpha = topLeft; } else { this._alphaTL = Clamp(topLeft, 0, 1); this._alphaTR = Clamp(topRight, 0, 1); this._alphaBL = Clamp(bottomLeft, 0, 1); this._alphaBR = Clamp(bottomRight, 0, 1); } return this; }, /** * The alpha value of the Game Object. * * This is a global value, impacting the entire Game Object, not just a region of it. * * @name Phaser.GameObjects.Components.Alpha#alpha * @type {float} * @since 3.0.0 */ alpha: { get: function () { return this._alpha; }, set: function (value) { var v = Clamp(value, 0, 1); this._alpha = v; this._alphaTL = v; this._alphaTR = v; this._alphaBL = v; this._alphaBR = v; if (v === 0) { this.renderFlags &= ~_FLAG; } else { this.renderFlags |= _FLAG; } } }, /** * The alpha value starting from the top-left of the Game Object. * This value is interpolated from the corner to the center of the Game Object. * * @name Phaser.GameObjects.Components.Alpha#alphaTopLeft * @type {float} * @webglOnly * @since 3.0.0 */ alphaTopLeft: { get: function () { return this._alphaTL; }, set: function (value) { var v = Clamp(value, 0, 1); this._alphaTL = v; if (v !== 0) { this.renderFlags |= _FLAG; } } }, /** * The alpha value starting from the top-right of the Game Object. * This value is interpolated from the corner to the center of the Game Object. * * @name Phaser.GameObjects.Components.Alpha#alphaTopRight * @type {float} * @webglOnly * @since 3.0.0 */ alphaTopRight: { get: function () { return this._alphaTR; }, set: function (value) { var v = Clamp(value, 0, 1); this._alphaTR = v; if (v !== 0) { this.renderFlags |= _FLAG; } } }, /** * The alpha value starting from the bottom-left of the Game Object. * This value is interpolated from the corner to the center of the Game Object. * * @name Phaser.GameObjects.Components.Alpha#alphaBottomLeft * @type {float} * @webglOnly * @since 3.0.0 */ alphaBottomLeft: { get: function () { return this._alphaBL; }, set: function (value) { var v = Clamp(value, 0, 1); this._alphaBL = v; if (v !== 0) { this.renderFlags |= _FLAG; } } }, /** * The alpha value starting from the bottom-right of the Game Object. * This value is interpolated from the corner to the center of the Game Object. * * @name Phaser.GameObjects.Components.Alpha#alphaBottomRight * @type {float} * @webglOnly * @since 3.0.0 */ alphaBottomRight: { get: function () { return this._alphaBR; }, set: function (value) { var v = Clamp(value, 0, 1); this._alphaBR = v; if (v !== 0) { this.renderFlags |= _FLAG; } } } }; module.exports = Alpha;