2013-10-01 12:54:29 +00:00
|
|
|
/**
|
|
|
|
* @author Richard Davey <rich@photonstorm.com>
|
2014-02-05 05:54:25 +00:00
|
|
|
* @copyright 2014 Photon Storm Ltd.
|
2013-10-01 12:54:29 +00:00
|
|
|
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
|
|
|
|
*/
|
|
|
|
|
2013-08-28 20:29:25 +00:00
|
|
|
/**
|
|
|
|
* Phaser.Game has a single instance of the TweenManager through which all Tween objects are created and updated.
|
|
|
|
* Tweens are hooked into the game clock and pause system, adjusting based on the game state.
|
|
|
|
*
|
2013-10-03 01:38:35 +00:00
|
|
|
* TweenManager is based heavily on tween.js by http://soledadpenades.com.
|
2013-08-28 20:29:25 +00:00
|
|
|
* The difference being that tweens belong to a games instance of TweenManager, rather than to a global TWEEN object.
|
|
|
|
* It also has callbacks swapped for Signals and a few issues patched with regard to properties and completion errors.
|
2013-10-03 01:38:35 +00:00
|
|
|
* Please see https://github.com/sole/tween.js for a full list of contributors.
|
2014-09-16 18:44:04 +00:00
|
|
|
*
|
|
|
|
* @class Phaser.TweenManager
|
2013-10-01 12:54:29 +00:00
|
|
|
* @constructor
|
|
|
|
* @param {Phaser.Game} game - A reference to the currently running game.
|
2013-08-28 20:29:25 +00:00
|
|
|
*/
|
|
|
|
Phaser.TweenManager = function (game) {
|
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
/**
|
|
|
|
* @property {Phaser.Game} game - Local reference to game.
|
|
|
|
*/
|
|
|
|
this.game = game;
|
2014-03-23 07:59:28 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
/**
|
2014-02-05 02:39:03 +00:00
|
|
|
* @property {array<Phaser.Tween>} _tweens - All of the currently running tweens.
|
2013-11-25 04:40:04 +00:00
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
this._tweens = [];
|
2014-03-23 07:59:28 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
/**
|
2014-02-05 02:39:03 +00:00
|
|
|
* @property {array<Phaser.Tween>} _add - All of the tweens queued to be added in the next update.
|
2013-11-25 04:40:04 +00:00
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
this._add = [];
|
|
|
|
|
2014-02-26 23:27:22 +00:00
|
|
|
this.game.onPause.add(this._pauseAll, this);
|
|
|
|
this.game.onResume.add(this._resumeAll, this);
|
2013-09-10 22:51:35 +00:00
|
|
|
|
2013-08-28 20:29:25 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
Phaser.TweenManager.prototype = {
|
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
/**
|
|
|
|
* Get all the tween objects in an array.
|
|
|
|
* @method Phaser.TweenManager#getAll
|
|
|
|
* @returns {Phaser.Tween[]} Array with all tween objects.
|
|
|
|
*/
|
|
|
|
getAll: function () {
|
|
|
|
|
|
|
|
return this._tweens;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
/**
|
2014-02-05 02:39:03 +00:00
|
|
|
* Remove all tweens running and in the queue. Doesn't call any of the tween onComplete events.
|
2013-11-25 04:40:04 +00:00
|
|
|
* @method Phaser.TweenManager#removeAll
|
|
|
|
*/
|
|
|
|
removeAll: function () {
|
|
|
|
|
2014-02-05 02:39:03 +00:00
|
|
|
for (var i = 0; i < this._tweens.length; i++)
|
|
|
|
{
|
|
|
|
this._tweens[i].pendingDelete = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
this._add = [];
|
2013-11-25 04:40:04 +00:00
|
|
|
|
|
|
|
},
|
2014-10-31 11:52:05 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Remove all tweens from a specific object, array of objects or group.
|
|
|
|
* @method Phaser.TweenManager#removeFrom
|
|
|
|
* @param {object|object[]|Phaser.Group} obj - The object you want to remove the tweens from.
|
|
|
|
* @param {boolean} children - If passing a group, setting this to true will remove the tweens from all of its children instead of the group itself.
|
|
|
|
*/
|
2014-10-31 11:55:32 +00:00
|
|
|
removeFrom: function(obj, children) {
|
2014-10-31 11:52:05 +00:00
|
|
|
|
|
|
|
var o, c, t, len;
|
|
|
|
|
2014-10-31 11:55:32 +00:00
|
|
|
if (Array.isArray(obj))
|
2014-10-31 11:52:05 +00:00
|
|
|
{
|
|
|
|
for (o = 0, len = obj.length; o < len; o++)
|
|
|
|
{
|
2014-10-31 11:55:32 +00:00
|
|
|
this.removeFrom(obj[o]);
|
2014-10-31 11:52:05 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (obj.type === Phaser.GROUP && children)
|
|
|
|
{
|
|
|
|
for (c = 0, len = obj.children.length; c < len; c++)
|
|
|
|
{
|
2014-10-31 11:55:32 +00:00
|
|
|
this.removeFrom(obj.children[c]);
|
2014-10-31 11:52:05 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for (t = 0, len = this._tweens.length; t < len; t++)
|
|
|
|
{
|
|
|
|
if (obj === this._tweens[t]._object)
|
|
|
|
{
|
|
|
|
this.remove(this._tweens[t]);
|
|
|
|
}
|
|
|
|
}
|
2014-11-14 16:41:14 +00:00
|
|
|
for (t = 0, len = this._add.length; t < len; t++)
|
|
|
|
{
|
|
|
|
if (obj === this._add[t]._object)
|
|
|
|
{
|
|
|
|
this.remove(this._add[t]);
|
|
|
|
}
|
|
|
|
}
|
2014-10-31 11:52:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
},
|
2013-11-25 04:40:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Add a new tween into the TweenManager.
|
|
|
|
*
|
|
|
|
* @method Phaser.TweenManager#add
|
|
|
|
* @param {Phaser.Tween} tween - The tween object you want to add.
|
|
|
|
* @returns {Phaser.Tween} The tween object you added to the manager.
|
|
|
|
*/
|
2014-01-04 02:53:32 +00:00
|
|
|
add: function (tween) {
|
2013-11-25 04:40:04 +00:00
|
|
|
|
2014-03-07 01:26:09 +00:00
|
|
|
tween._manager = this;
|
2014-01-04 02:53:32 +00:00
|
|
|
this._add.push(tween);
|
2013-11-25 04:40:04 +00:00
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
/**
|
2014-03-23 07:59:28 +00:00
|
|
|
* Create a tween object for a specific object. The object can be any JavaScript object or Phaser object such as Sprite.
|
2013-11-25 04:40:04 +00:00
|
|
|
*
|
|
|
|
* @method Phaser.TweenManager#create
|
|
|
|
* @param {Object} object - Object the tween will be run on.
|
|
|
|
* @returns {Phaser.Tween} The newly created tween object.
|
|
|
|
*/
|
2013-09-10 19:40:34 +00:00
|
|
|
create: function (object) {
|
|
|
|
|
2014-03-07 01:26:09 +00:00
|
|
|
return new Phaser.Tween(object, this.game, this);
|
2013-08-28 20:29:25 +00:00
|
|
|
|
|
|
|
},
|
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
/**
|
|
|
|
* Remove a tween from this manager.
|
|
|
|
*
|
|
|
|
* @method Phaser.TweenManager#remove
|
|
|
|
* @param {Phaser.Tween} tween - The tween object you want to remove.
|
|
|
|
*/
|
2014-01-04 02:53:32 +00:00
|
|
|
remove: function (tween) {
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2014-01-04 02:53:32 +00:00
|
|
|
var i = this._tweens.indexOf(tween);
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2014-01-04 02:53:32 +00:00
|
|
|
if (i !== -1)
|
|
|
|
{
|
2013-11-25 04:40:04 +00:00
|
|
|
this._tweens[i].pendingDelete = true;
|
|
|
|
}
|
2014-07-16 18:50:58 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
i = this._add.indexOf(tween);
|
|
|
|
|
|
|
|
if (i !== -1)
|
|
|
|
{
|
|
|
|
this._add[i].pendingDelete = true;
|
|
|
|
}
|
|
|
|
}
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
},
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
/**
|
|
|
|
* Update all the tween objects you added to this manager.
|
|
|
|
*
|
|
|
|
* @method Phaser.TweenManager#update
|
|
|
|
* @returns {boolean} Return false if there's no tween to update, otherwise return true.
|
|
|
|
*/
|
|
|
|
update: function () {
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2014-07-16 18:50:58 +00:00
|
|
|
var addTweens = this._add.length;
|
|
|
|
var numTweens = this._tweens.length;
|
|
|
|
|
|
|
|
if (numTweens === 0 && addTweens === 0)
|
2013-11-25 04:40:04 +00:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
var i = 0;
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2014-01-04 02:53:32 +00:00
|
|
|
while (i < numTweens)
|
|
|
|
{
|
|
|
|
if (this._tweens[i].update(this.game.time.now))
|
|
|
|
{
|
2013-11-25 04:40:04 +00:00
|
|
|
i++;
|
2014-01-04 02:53:32 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this._tweens.splice(i, 1);
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
numTweens--;
|
|
|
|
}
|
|
|
|
}
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
// If there are any new tweens to be added, do so now - otherwise they can be spliced out of the array before ever running
|
2014-07-16 18:50:58 +00:00
|
|
|
if (addTweens > 0)
|
2013-11-25 04:40:04 +00:00
|
|
|
{
|
|
|
|
this._tweens = this._tweens.concat(this._add);
|
|
|
|
this._add.length = 0;
|
|
|
|
}
|
2013-09-19 03:45:08 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
return true;
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
},
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
/**
|
|
|
|
* Checks to see if a particular Sprite is currently being tweened.
|
|
|
|
*
|
|
|
|
* @method Phaser.TweenManager#isTweening
|
|
|
|
* @param {object} object - The object to check for tweens against.
|
|
|
|
* @returns {boolean} Returns true if the object is currently being tweened, false if not.
|
|
|
|
*/
|
|
|
|
isTweening: function(object) {
|
2013-11-01 17:28:09 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
return this._tweens.some(function(tween) {
|
|
|
|
return tween._object === object;
|
|
|
|
});
|
2013-11-01 17:28:09 +00:00
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
},
|
2013-11-01 17:28:09 +00:00
|
|
|
|
2014-02-26 23:27:22 +00:00
|
|
|
/**
|
|
|
|
* Private. Called by game focus loss. Pauses all currently running tweens.
|
|
|
|
*
|
|
|
|
* @method Phaser.TweenManager#_pauseAll
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
_pauseAll: function () {
|
|
|
|
|
|
|
|
for (var i = this._tweens.length - 1; i >= 0; i--)
|
|
|
|
{
|
|
|
|
this._tweens[i]._pause();
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Private. Called by game focus loss. Resumes all currently paused tweens.
|
|
|
|
*
|
|
|
|
* @method Phaser.TweenManager#_resumeAll
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
_resumeAll: function () {
|
|
|
|
|
|
|
|
for (var i = this._tweens.length - 1; i >= 0; i--)
|
|
|
|
{
|
|
|
|
this._tweens[i]._resume();
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
/**
|
|
|
|
* Pauses all currently running tweens.
|
|
|
|
*
|
2014-02-20 03:44:44 +00:00
|
|
|
* @method Phaser.TweenManager#pauseAll
|
2013-11-25 04:40:04 +00:00
|
|
|
*/
|
|
|
|
pauseAll: function () {
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2014-01-04 02:53:32 +00:00
|
|
|
for (var i = this._tweens.length - 1; i >= 0; i--)
|
|
|
|
{
|
2013-11-25 04:40:04 +00:00
|
|
|
this._tweens[i].pause();
|
|
|
|
}
|
2013-08-28 20:29:25 +00:00
|
|
|
|
|
|
|
},
|
|
|
|
|
2013-11-25 04:40:04 +00:00
|
|
|
/**
|
2014-02-26 23:27:22 +00:00
|
|
|
* Resumes all currently paused tweens.
|
2013-11-25 04:40:04 +00:00
|
|
|
*
|
|
|
|
* @method Phaser.TweenManager#resumeAll
|
|
|
|
*/
|
|
|
|
resumeAll: function () {
|
2013-08-28 20:29:25 +00:00
|
|
|
|
2014-01-04 02:53:32 +00:00
|
|
|
for (var i = this._tweens.length - 1; i >= 0; i--)
|
|
|
|
{
|
2014-02-25 03:33:47 +00:00
|
|
|
this._tweens[i].resume(true);
|
2013-11-25 04:40:04 +00:00
|
|
|
}
|
2013-08-28 20:29:25 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-12-30 16:54:00 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
Phaser.TweenManager.prototype.constructor = Phaser.TweenManager;
|