phaser/src/structs/ProcessQueue.js

100 lines
1.8 KiB
JavaScript
Raw Normal View History

// Phaser.Structs.ProcessQueue
var Class = require('../utils/Class');
var ProcessQueue = new Class({
initialize:
function ProcessQueue ()
{
this._pending = [];
this._active = [];
this._destroy = [];
this._toProcess = 0;
},
add: function (item)
{
this._pending.push(item);
this._toProcess++;
return this;
},
remove: function (item)
{
this._destroy.push(item);
this._toProcess++;
return this;
},
update: function ()
{
if (this._toProcess === 0)
{
// Quick bail
return this._active;
}
var list = this._destroy;
var active = this._active;
var i;
var item;
// Clear the 'destroy' list
for (i = 0; i < list.length; i++)
{
item = list[i];
// Remove from the 'active' array
var idx = active.indexOf(item);
if (idx !== -1)
{
active.splice(idx, 1);
}
}
list.length = 0;
// Process the pending addition list
// This stops callbacks and out of sync events from populating the active array mid-way during an update
list = this._pending;
for (i = 0; i < list.length; i++)
{
item = list[i];
this._active.push(item);
}
list.length = 0;
this._toProcess = 0;
// The owner of this queue can now safely do whatever it needs to with the active list
return this._active;
},
getActive: function ()
{
return this._active;
},
destroy: function ()
{
this._pending = [];
this._active = [];
this._destroy = [];
}
});
module.exports = ProcessQueue;