var Class = require('../utils/Class'); var UpdateList = new Class({ initialize: function UpdateList (scene) { this.scene = scene; this._list = []; this._pendingInsertion = []; this._pendingRemoval = []; }, add: function (child) { this._pendingInsertion.push(child); }, begin: function () { var toRemove = this._pendingRemoval.length; var toInsert = this._pendingInsertion.length; if (toRemove === 0 && toInsert === 0) { // Quick bail return; } var i; var gameObject; // Delete old gameObjects for (i = 0; i < toRemove; i++) { gameObject = this._pendingRemoval[i]; var index = this._list.indexOf(gameObject); if (index > -1) { this._list.splice(index, 1); } // Pool them? // gameObject.destroy(); } // Move pending to active this._list = this._list.concat(this._pendingInsertion.splice(0)); // Clear the lists this._pendingRemoval.length = 0; this._pendingInsertion.length = 0; }, update: function (time, delta) { for (var i = 0; i < this._list.length; i++) { var gameObject = this._list[i]; if (gameObject.active) { gameObject.preUpdate.call(gameObject, time, delta); } } }, // Scene that owns this Clock is shutting down shutdown: function () { var i; for (i = 0; i < this._pendingInsertion.length; i++) { this._pendingInsertion[i].destroy(); } for (i = 0; i < this._list.length; i++) { this._list[i].destroy(); } for (i = 0; i < this._pendingRemoval.length; i++) { this._pendingRemoval[i].destroy(); } this._list.length = 0; this._pendingRemoval.length = 0; this._pendingInsertion.length = 0; }, // Game level nuke destroy: function () { this.shutdown(); this.scene = undefined; } }); module.exports = UpdateList;