2017-02-23 03:10:48 +00:00
|
|
|
var Class = require('../utils/Class');
|
2017-07-04 00:59:31 +00:00
|
|
|
var Components = require('./components');
|
2017-09-08 00:59:53 +00:00
|
|
|
var DataProxy = require('./components/DataProxy');
|
2016-12-07 02:28:22 +00:00
|
|
|
|
2017-09-11 23:28:53 +00:00
|
|
|
/**
|
|
|
|
* The base GameObject class that all Game Objects extend.
|
|
|
|
*
|
|
|
|
* @class GameObject
|
|
|
|
*
|
|
|
|
* @param {Scene} scene - The Scene to which this Game Object belongs.
|
|
|
|
* @param {String} type - A textual representation of the Game Object.
|
|
|
|
*/
|
2017-02-23 03:10:48 +00:00
|
|
|
var GameObject = new Class({
|
2016-12-07 02:28:22 +00:00
|
|
|
|
2017-02-23 03:10:48 +00:00
|
|
|
initialize:
|
2016-12-07 02:28:22 +00:00
|
|
|
|
2017-07-14 13:30:20 +00:00
|
|
|
function GameObject (scene, type)
|
2017-02-23 03:10:48 +00:00
|
|
|
{
|
2017-09-11 23:28:53 +00:00
|
|
|
/**
|
|
|
|
* The Scene to which this Game Object belongs.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @property {Scene} scene
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2017-07-14 13:30:20 +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.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @property {String} type
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2017-04-12 23:05:12 +00:00
|
|
|
this.type = type;
|
2017-07-04 00:59:31 +00:00
|
|
|
|
2017-09-11 23:28:53 +00:00
|
|
|
/**
|
|
|
|
* The name of this Game Object. Blank by default and not populated by Phaser. Left for developers use.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @property {String} [name='']
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2017-02-23 03:10:48 +00:00
|
|
|
this.name = '';
|
2017-07-04 00:59:31 +00:00
|
|
|
|
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 UpdateList.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @property {Boolean} [active=true]
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2017-07-07 00:56:02 +00:00
|
|
|
this.active = true;
|
|
|
|
|
2017-09-11 23:28:53 +00:00
|
|
|
/**
|
|
|
|
* The Tab Index of this Game Object.
|
|
|
|
*
|
2017-09-12 16:08:43 +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 and query key/value paired information specific to this Game Object.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @property {DataProxy} data
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2017-09-08 00:59:53 +00:00
|
|
|
this.data = new DataProxy(scene, this);
|
|
|
|
|
2017-09-11 23:28:53 +00:00
|
|
|
/**
|
|
|
|
* The bitmask that determines if the Game Object will render or not.
|
|
|
|
* Structure: 0001 | 0010 | 0100 | 1000
|
|
|
|
* The components: Visible, Alpha, Transform and Texture set bits in this mask respectively
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @property {Integer} [renderMask=15]
|
2017-09-11 23:28:53 +00:00
|
|
|
* @private
|
|
|
|
*/
|
2017-02-23 03:10:48 +00:00
|
|
|
this.renderMask = 15;
|
2017-09-11 23:28:53 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The flags that the renderMask uses to determine if the Game Object will render or not.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @property {Integer} [renderFlags=15]
|
2017-09-11 23:28:53 +00:00
|
|
|
* @private
|
|
|
|
*/
|
2017-02-23 03:10:48 +00:00
|
|
|
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.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @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.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @property {Phaser.Input.InteractiveObject|null} [input=null]
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2017-07-18 12:53:34 +00:00
|
|
|
this.input = null;
|
2017-07-13 01:05:32 +00:00
|
|
|
|
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.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @property {Phaser.Physics.Body|null} [body=null]
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2017-08-15 22:35:16 +00:00
|
|
|
this.body = null;
|
|
|
|
|
2017-09-12 16:08:43 +00:00
|
|
|
// Tell the Scene to re-sort the children
|
2017-07-14 13:30:20 +00:00
|
|
|
this.scene.sys.sortChildrenFlag = true;
|
2017-02-23 03:10:48 +00:00
|
|
|
},
|
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.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @method GameObject#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.
|
2017-09-12 16:08:43 +00:00
|
|
|
* @return {GameObject} This GameObject.
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2017-07-07 00:56:02 +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.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @method GameObject#setName
|
2017-09-11 23:28:53 +00:00
|
|
|
*
|
|
|
|
* @param {String} value - The name to be given to this Game Object.
|
2017-09-12 16:08:43 +00:00
|
|
|
* @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-07 17:26:03 +00:00
|
|
|
{
|
2017-07-27 16:39:46 +00:00
|
|
|
this.name = value;
|
|
|
|
|
|
|
|
return this;
|
2017-07-07 17:26:03 +00:00
|
|
|
},
|
|
|
|
|
2017-09-11 23:28:53 +00:00
|
|
|
/**
|
|
|
|
* Pass this Game Object to the Input Manager to enable it for Input.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @method GameObject#setInteractive
|
2017-09-11 23:28:53 +00:00
|
|
|
*
|
|
|
|
* @param {[type]} [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.
|
2017-09-12 16:08:43 +00:00
|
|
|
* @return {GameObject} This GameObject.
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2017-07-18 12:53:34 +00:00
|
|
|
setInteractive: function (shape, callback)
|
2017-07-13 01:05:32 +00:00
|
|
|
{
|
2017-07-18 12:53:34 +00:00
|
|
|
this.scene.sys.inputManager.enable(this, shape, callback);
|
2017-07-13 01:05:32 +00:00
|
|
|
|
|
|
|
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.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @method GameObject#toJSON
|
2017-09-11 23:28:53 +00:00
|
|
|
*
|
|
|
|
* @return {Object} A JSON representation of the Game Object.
|
|
|
|
*/
|
2017-04-12 23:35:27 +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.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @method GameObject#willRender
|
2017-09-11 23:28:53 +00:00
|
|
|
*
|
|
|
|
* @return {Boolean} True if the Game Object should be rendered, otherwise false.
|
|
|
|
*/
|
2017-07-27 13:22:05 +00:00
|
|
|
willRender: function ()
|
|
|
|
{
|
|
|
|
return (this.renderMask === this.renderFlags);
|
|
|
|
},
|
|
|
|
|
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.
|
|
|
|
*
|
2017-09-12 16:08:43 +00:00
|
|
|
* @method GameObject#destroy
|
2017-09-11 23:28:53 +00:00
|
|
|
*/
|
2016-12-07 02:28:22 +00:00
|
|
|
destroy: function ()
|
|
|
|
{
|
2017-09-01 18:47:26 +00:00
|
|
|
this.scene.sys.displayList.remove(this);
|
|
|
|
this.scene.sys.updateList.remove(this);
|
2017-03-30 12:28:40 +00:00
|
|
|
|
2017-07-28 00:17:18 +00:00
|
|
|
if (this.input)
|
|
|
|
{
|
|
|
|
this.scene.sys.inputManager.clear(this);
|
|
|
|
}
|
|
|
|
|
2017-08-15 22:35:16 +00:00
|
|
|
if (this.body)
|
|
|
|
{
|
|
|
|
this.scene.sys.physicsManager.remove(this);
|
|
|
|
}
|
|
|
|
|
2017-08-07 16:14:13 +00:00
|
|
|
this.active = false;
|
|
|
|
|
2017-07-14 13:30:20 +00:00
|
|
|
this.scene = undefined;
|
2016-12-07 02:28:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
module.exports = GameObject;
|