phaser/v3/src/gameobjects/GameObject.js

227 lines
6.6 KiB
JavaScript
Raw Normal View History

/**
* @author Richard Davey <rich@phaser.io>
* @copyright 2017 Photon Storm Ltd.
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
*/
var Class = require('../utils/Class');
var Components = require('./components');
var DataProxy = require('./components/DataProxy');
2016-12-07 02:28:22 +00:00
var GameObject = new Class({
2016-12-07 02:28:22 +00:00
initialize:
2016-12-07 02:28:22 +00:00
/**
* The base class that all Game Objects extend.
* You don't create GameObjects directly and they cannot be added to the display list.
* Instead, use them as the base for your own custom classes.
*
* @class GameObject
* @namespace Phaser.GameObjects
* @constructor
*
* @param {Phaser.Scene} scene - The Scene to which this Game Object belongs.
* @param {string} type - A textual representation of the type of Game Object, i.e. `sprite`.
*/
function GameObject (scene, type)
{
2017-09-11 23:28:53 +00:00
/**
* The Scene to which this Game Object belongs.
* Game Objects can only belong to one Scene.
2017-09-11 23:28:53 +00:00
*
* @property {Phaser.Scene} scene
2017-09-11 23:28:53 +00:00
*/
this.scene = scene;
2016-12-07 02:28:22 +00:00
2017-09-11 23:28:53 +00:00
/**
* A textual representation of this Game Object, i.e. `sprite`.
* Used internally by Phaser but is available for your own custom classes to populate.
2017-09-11 23:28:53 +00:00
*
* @property {string} type
2017-09-11 23:28:53 +00:00
*/
this.type = type;
2017-09-11 23:28:53 +00:00
/**
* The name of this Game Object.
* Empty by default and never populated by Phaser, this is left for developers to use.
2017-09-11 23:28:53 +00:00
*
* @property {string} [name='']
2017-09-11 23:28:53 +00:00
*/
this.name = '';
2017-09-11 23:28:53 +00:00
/**
* The active state of this Game Object.
* A Game Object with an active state of `true` is processed by the Scenes UpdateList, if added to it.
2017-09-11 23:28:53 +00:00
*
* @property {boolean} [active=true]
2017-09-11 23:28:53 +00:00
*/
this.active = true;
2017-09-11 23:28:53 +00:00
/**
* The Tab Index of the Game Object.
* Reserved for future use by plugins and the Input Manager.
2017-09-11 23:28:53 +00:00
*
* @property {integer} [tabIndex=-1]
2017-09-11 23:28:53 +00:00
*/
2017-05-01 00:27:35 +00:00
this.tabIndex = -1;
2016-12-07 02:28:22 +00:00
2017-09-11 23:28:53 +00:00
/**
* A proxy to the Data class.
* It allows you to store, query and get key/value paired information specific to this Game Object.
2017-09-11 23:28:53 +00:00
*
* @property {DataProxy} data
2017-09-11 23:28:53 +00:00
*/
this.data = new DataProxy(scene, this);
2017-09-11 23:28:53 +00:00
/**
* The flags that the renderMask uses to determine if the Game Object will render or not.
* Structure: 0001 | 0010 | 0100 | 1000
* The components Visible, Alpha, Transform and Texture set the bits in this mask respectively
2017-09-11 23:28:53 +00:00
*
* @property {integer} [renderFlags=15]
2017-09-11 23:28:53 +00:00
* @private
*/
this.renderFlags = 15;
2017-09-11 23:28:53 +00:00
/**
* A bitmask that controls if this Game Object is drawn by a Camera or not.
*
* @property {number} [cameraFilter=0]
2017-09-11 23:28:53 +00:00
* @private
*/
2017-08-15 19:42:04 +00:00
this.cameraFilter = 0;
2017-07-07 17:12:57 +00:00
2017-09-11 23:28:53 +00:00
/**
* If this Game Object is enabled for input then this property will contain a Phaser.Input.InteractiveObject reference.
*
* @property {Phaser.Input.InteractiveObject|null} [input=null]
2017-09-11 23:28:53 +00:00
*/
this.input = null;
2017-09-11 23:28:53 +00:00
/**
* If this Game Object is enabled for physics then this property will contain a reference to a Physics Body.
*
* @property {Phaser.Physics.Body|null} [body=null]
2017-09-11 23:28:53 +00:00
*/
this.body = null;
// Tell the Scene to re-sort the children
this.scene.sys.sortChildrenFlag = true;
},
2016-12-07 02:28:22 +00:00
2017-09-11 23:28:53 +00:00
/**
* Sets the `active` property of this Game Object and returns this Game Object for further chaining.
*
* @method setActive
2017-09-11 23:28:53 +00:00
*
* @param {boolean} value - True if this Game Object should be set as active, false if not.
* @return {GameObject} This GameObject.
2017-09-11 23:28:53 +00:00
*/
setActive: function (value)
{
this.active = value;
return this;
},
2017-09-11 23:28:53 +00:00
/**
* Sets the `name` property of this Game Object and returns this Game Object for further chaining.
*
* @method setName
2017-09-11 23:28:53 +00:00
*
* @param {string} value - The name to be given to this Game Object.
* @return {GameObject} This GameObject.
2017-09-11 23:28:53 +00:00
*/
2017-07-27 16:39:46 +00:00
setName: function (value)
{
2017-07-27 16:39:46 +00:00
this.name = value;
return this;
},
2017-09-11 23:28:53 +00:00
/**
* Pass this Game Object to the Input Manager to enable it for Input.
*
* @method setInteractive
2017-09-11 23:28:53 +00:00
*
* @param {any} [shape] - A geometric shape that defines the hit area for the Game Object. If not specified a Rectangle will be used.
* @param {function} [callback] - A callback to be invoked when the Game Object is interacted with.
* @return {GameObject} This GameObject.
2017-09-11 23:28:53 +00:00
*/
setInteractive: function (shape, callback)
{
this.scene.sys.inputManager.enable(this, shape, callback);
return this;
},
2017-07-27 16:39:46 +00:00
// To be overridden by custom GameObjects. Allows base objects to be used in a Pool.
update: function ()
{
},
2017-09-11 23:28:53 +00:00
/**
* Returns a JSON representation of the Game Object.
*
* @method toJSON
2017-09-11 23:28:53 +00:00
*
* @return {object} A JSON representation of the Game Object.
2017-09-11 23:28:53 +00:00
*/
toJSON: function ()
{
return Components.ToJSON(this);
},
2017-09-11 23:28:53 +00:00
/**
* Compares the renderMask with the renderFlags to see if this Game Object will render or not.
*
* @method willRender
2017-09-11 23:28:53 +00:00
*
* @return {boolean} True if the Game Object should be rendered, otherwise false.
2017-09-11 23:28:53 +00:00
*/
2017-07-27 13:22:05 +00:00
willRender: function ()
{
return (GameObject.RENDER_MASK === this.renderFlags);
2017-07-27 13:22:05 +00:00
},
2017-09-11 23:28:53 +00:00
/**
* Destroys this Game Object, removing it from the Display List and Update List.
* Also removes it from the Input and Physics Managers if enabled.
* Sets the active state to `false`. Use this to remove a Game Object from your game if
* you don't plan to use it again later. If you do wish to use it later then look at using
* the Game Object Pool class instead.
*
* @method destroy
2017-09-11 23:28:53 +00:00
*/
2016-12-07 02:28:22 +00:00
destroy: function ()
{
this.scene.sys.displayList.remove(this);
this.scene.sys.updateList.remove(this);
if (this.input)
{
this.scene.sys.inputManager.clear(this);
}
if (this.body)
{
this.scene.sys.physicsManager.remove(this);
}
this.active = false;
this.scene = undefined;
2016-12-07 02:28:22 +00:00
}
});
/**
* The bitmask that `GameObject.renderFlags` is compared against to determine if the Game Object will render or not.
*
* @constant {integer} [RENDER_MASK=15]
*/
GameObject.RENDER_MASK = 15;
2016-12-07 02:28:22 +00:00
module.exports = GameObject;