phaser/src/gameobjects/blitter/Bob.js

425 lines
11 KiB
JavaScript
Raw Normal View History

2018-02-12 16:01:20 +00:00
/**
* @author Richard Davey <rich@photonstorm.com>
2020-01-15 12:07:09 +00:00
* @copyright 2020 Photon Storm Ltd.
2019-05-10 15:15:04 +00:00
* @license {@link https://opensource.org/licenses/MIT|MIT License}
2018-02-12 16:01:20 +00:00
*/
var Class = require('../../utils/Class');
var Frame = require('../../textures/Frame');
2017-01-24 12:55:45 +00:00
2018-02-01 05:48:56 +00:00
/**
2018-02-07 15:27:21 +00:00
* @classdesc
2018-02-06 14:13:30 +00:00
* A Bob Game Object.
*
* A Bob belongs to a Blitter Game Object. The Blitter is responsible for managing and rendering this object.
*
* A Bob has a position, alpha value and a frame from a texture that it uses to render with. You can also toggle
* the flipped and visible state of the Bob. The Frame the Bob uses to render can be changed dynamically, but it
* must be a Frame within the Texture used by the parent Blitter.
*
* Bob positions are relative to the Blitter parent. So if you move the Blitter parent, all Bob children will
* have their positions impacted by this change as well.
*
* You can manipulate Bob objects directly from your game code, but the creation and destruction of them should be
* handled via the Blitter parent.
2018-02-01 05:48:56 +00:00
*
* @class Bob
2019-02-01 18:02:58 +00:00
* @memberof Phaser.GameObjects
2018-02-01 05:48:56 +00:00
* @constructor
* @since 3.0.0
*
2018-02-06 14:13:30 +00:00
* @param {Phaser.GameObjects.Blitter} blitter - The parent Blitter object is responsible for updating this Bob.
* @param {number} x - The horizontal position of this Game Object in the world, relative to the parent Blitter position.
* @param {number} y - The vertical position of this Game Object in the world, relative to the parent Blitter position.
2018-03-20 14:56:31 +00:00
* @param {(string|integer)} frame - The Frame this Bob will render with, as defined in the Texture the parent Blitter is using.
2018-02-06 14:13:30 +00:00
* @param {boolean} visible - Should the Bob render visible or not to start with?
2018-02-01 05:48:56 +00:00
*/
var Bob = new Class({
initialize:
2017-10-02 13:50:02 +00:00
function Bob (blitter, x, y, frame, visible)
{
2018-02-01 05:48:56 +00:00
/**
* The Blitter object that this Bob belongs to.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#parent
2018-02-01 05:48:56 +00:00
* @type {Phaser.GameObjects.Blitter}
* @since 3.0.0
*/
2017-10-02 13:50:02 +00:00
this.parent = blitter;
2018-02-01 05:48:56 +00:00
/**
* The x position of this Bob, relative to the x position of the Blitter.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#x
2018-02-01 05:48:56 +00:00
* @type {number}
* @since 3.0.0
*/
this.x = x;
2018-02-01 05:48:56 +00:00
/**
* The y position of this Bob, relative to the y position of the Blitter.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#y
2018-02-01 05:48:56 +00:00
* @type {number}
* @since 3.0.0
*/
this.y = y;
2018-02-01 05:48:56 +00:00
/**
* The frame that the Bob uses to render with.
* To change the frame use the `Bob.setFrame` method.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#frame
* @type {Phaser.Textures.Frame}
* @protected
2018-02-01 05:48:56 +00:00
* @since 3.0.0
*/
this.frame = frame;
2018-02-01 05:48:56 +00:00
/**
* A blank object which can be used to store data related to this Bob in.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#data
2018-02-01 05:48:56 +00:00
* @type {object}
* @default {}
* @since 3.0.0
*/
this.data = {};
2019-10-01 02:17:14 +00:00
/**
* The tint value of this Bob.
*
* @name Phaser.GameObjects.Bob#tint
* @type {number}
* @default 0xffffff
* @since 3.20.0
*/
this.tint = 0xffffff;
2018-02-01 05:48:56 +00:00
/**
* The visible state of this Bob.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#_visible
2018-02-01 05:48:56 +00:00
* @type {boolean}
* @private
* @since 3.0.0
*/
this._visible = visible;
2018-02-01 05:48:56 +00:00
/**
* The alpha value of this Bob.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#_alpha
2018-02-01 05:48:56 +00:00
* @type {number}
* @private
* @default 1
* @since 3.0.0
*/
this._alpha = 1;
2018-02-01 05:48:56 +00:00
/**
* The horizontally flipped state of the Bob.
* A Bob that is flipped horizontally will render inversed on the horizontal axis.
* Flipping always takes place from the middle of the texture.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#flipX
2018-02-01 05:48:56 +00:00
* @type {boolean}
* @since 3.0.0
*/
this.flipX = false;
/**
* The vertically flipped state of the Bob.
* A Bob that is flipped vertically will render inversed on the vertical axis (i.e. upside down)
* Flipping always takes place from the middle of the texture.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#flipY
2018-02-01 05:48:56 +00:00
* @type {boolean}
* @since 3.0.0
*/
this.flipY = false;
},
2018-02-01 05:48:56 +00:00
/**
* Changes the Texture Frame being used by this Bob.
* The frame must be part of the Texture the parent Blitter is using.
* If no value is given it will use the default frame of the Blitter parent.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @method Phaser.GameObjects.Bob#setFrame
2018-02-01 05:48:56 +00:00
* @since 3.0.0
*
* @param {(string|integer|Phaser.Textures.Frame)} [frame] - The frame to be used during rendering.
2018-02-01 05:48:56 +00:00
*
* @return {this} This Bob Game Object.
2018-02-01 05:48:56 +00:00
*/
setFrame: function (frame)
{
if (frame === undefined)
{
this.frame = this.parent.frame;
}
else if (frame instanceof Frame && frame.texture === this.parent.texture)
{
this.frame = frame;
}
else
{
this.frame = this.parent.texture.get(frame);
}
return this;
},
2018-02-01 05:48:56 +00:00
/**
* Resets the horizontal and vertical flipped state of this Bob back to their default un-flipped state.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @method Phaser.GameObjects.Bob#resetFlip
2018-02-01 05:48:56 +00:00
* @since 3.0.0
2018-03-19 11:54:31 +00:00
*
* @return {this} This Bob Game Object.
2018-02-01 05:48:56 +00:00
*/
resetFlip: function ()
{
this.flipX = false;
this.flipY = false;
2018-02-01 05:48:56 +00:00
return this;
},
2018-02-01 05:48:56 +00:00
/**
* Resets this Bob.
*
* Changes the position to the values given, and optionally changes the frame.
*
* Also resets the flipX and flipY values, sets alpha back to 1 and visible to true.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @method Phaser.GameObjects.Bob#reset
2018-02-01 05:48:56 +00:00
* @since 3.0.0
*
* @param {number} x - The x position of the Bob. Bob coordinate are relative to the position of the Blitter object.
* @param {number} y - The y position of the Bob. Bob coordinate are relative to the position of the Blitter object.
* @param {(string|integer|Phaser.Textures.Frame)} [frame] - The Frame the Bob will use. It _must_ be part of the Texture the parent Blitter object is using.
2018-03-19 11:54:31 +00:00
*
* @return {this} This Bob Game Object.
2018-02-01 05:48:56 +00:00
*/
reset: function (x, y, frame)
{
this.x = x;
this.y = y;
this.flipX = false;
this.flipY = false;
this._alpha = 1;
this._visible = true;
this.parent.dirty = true;
if (frame)
{
this.setFrame(frame);
}
2018-02-01 05:48:56 +00:00
return this;
},
2019-10-01 02:17:14 +00:00
/**
* Changes the position of this Bob to the values given.
*
* @method Phaser.GameObjects.Bob#setPosition
* @since 3.20.0
*
* @param {number} x - The x position of the Bob. Bob coordinate are relative to the position of the Blitter object.
* @param {number} y - The y position of the Bob. Bob coordinate are relative to the position of the Blitter object.
*
* @return {this} This Bob Game Object.
2019-10-01 02:17:14 +00:00
*/
setPosition: function (x, y)
{
this.x = x;
this.y = y;
return this;
},
2018-02-01 05:48:56 +00:00
/**
* Sets the horizontal flipped state of this Bob.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @method Phaser.GameObjects.Bob#setFlipX
2018-02-01 05:48:56 +00:00
* @since 3.0.0
*
* @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.
2018-02-01 05:48:56 +00:00
*
* @return {this} This Bob Game Object.
2018-02-01 05:48:56 +00:00
*/
setFlipX: function (value)
{
this.flipX = value;
return this;
},
2018-02-01 05:48:56 +00:00
/**
* Sets the vertical flipped state of this Bob.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @method Phaser.GameObjects.Bob#setFlipY
2018-02-01 05:48:56 +00:00
* @since 3.0.0
*
* @param {boolean} value - The flipped state. `false` for no flip, or `true` to be flipped.
2018-02-01 05:48:56 +00:00
*
* @return {this} This Bob Game Object.
2018-02-01 05:48:56 +00:00
*/
setFlipY: function (value)
{
this.flipY = value;
return this;
},
2018-02-01 05:48:56 +00:00
/**
* Sets the horizontal and vertical flipped state of this Bob.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @method Phaser.GameObjects.Bob#setFlip
2018-02-01 05:48:56 +00:00
* @since 3.0.0
*
* @param {boolean} x - The horizontal flipped state. `false` for no flip, or `true` to be flipped.
* @param {boolean} y - The horizontal flipped state. `false` for no flip, or `true` to be flipped.
2018-02-01 05:48:56 +00:00
*
* @return {this} This Bob Game Object.
2018-02-01 05:48:56 +00:00
*/
setFlip: function (x, y)
{
this.flipX = x;
this.flipY = y;
return this;
},
2018-02-01 05:48:56 +00:00
/**
* Sets the visibility of this Bob.
*
* An invisible Bob will skip rendering.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @method Phaser.GameObjects.Bob#setVisible
2018-02-01 05:48:56 +00:00
* @since 3.0.0
*
* @param {boolean} value - The visible state of the Game Object.
2018-02-01 05:48:56 +00:00
*
* @return {this} This Bob Game Object.
2018-02-01 05:48:56 +00:00
*/
setVisible: function (value)
{
this.visible = value;
return this;
},
2018-02-01 05:48:56 +00:00
/**
* Set the Alpha level of this Bob. 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.
*
* A Bob with alpha 0 will skip rendering.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @method Phaser.GameObjects.Bob#setAlpha
2018-02-01 05:48:56 +00:00
* @since 3.0.0
*
* @param {number} value - The alpha value used for this Bob. Between 0 and 1.
2018-02-01 05:48:56 +00:00
*
* @return {this} This Bob Game Object.
2018-02-01 05:48:56 +00:00
*/
setAlpha: function (value)
{
this.alpha = value;
return this;
},
2019-10-01 02:17:14 +00:00
/**
* Sets the tint of this Bob.
*
* @method Phaser.GameObjects.Bob#setTint
* @since 3.20.0
*
* @param {number} value - The tint value used for this Bob. Between 0 and 0xffffff.
*
* @return {this} This Bob Game Object.
2019-10-01 02:17:14 +00:00
*/
setTint: function (value)
{
this.tint = value;
return this;
},
2018-02-01 05:48:56 +00:00
/**
* Destroys this Bob instance.
* Removes itself from the Blitter and clears the parent, frame and data properties.
2018-02-01 05:48:56 +00:00
*
2019-02-01 18:02:58 +00:00
* @method Phaser.GameObjects.Bob#destroy
2018-02-01 05:48:56 +00:00
* @since 3.0.0
*/
destroy: function ()
{
this.parent.dirty = true;
this.parent.children.remove(this);
this.parent = undefined;
this.frame = undefined;
this.data = undefined;
},
2018-02-01 05:48:56 +00:00
/**
* The visible state of the Bob.
*
* An invisible Bob will skip rendering.
2018-03-19 11:54:31 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#visible
2018-02-01 05:48:56 +00:00
* @type {boolean}
* @since 3.0.0
*/
visible: {
get: function ()
{
return this._visible;
},
set: function (value)
{
this.parent.dirty |= (this._visible !== value);
this._visible = value;
}
},
2018-02-01 05:48:56 +00:00
/**
* The alpha value of the Bob, between 0 and 1.
*
* A Bob with alpha 0 will skip rendering.
2018-03-19 11:54:31 +00:00
*
2019-02-01 18:02:58 +00:00
* @name Phaser.GameObjects.Bob#alpha
2018-02-01 05:48:56 +00:00
* @type {number}
* @since 3.0.0
*/
alpha: {
get: function ()
{
return this._alpha;
},
set: function (value)
{
this.parent.dirty |= ((this._alpha > 0) !== (value > 0));
this._alpha = value;
}
}
});
2017-01-24 12:55:45 +00:00
module.exports = Bob;