var Class = require('../utils/Class'); var UpdateList = new Class({ initialize: function UpdateList(){ this._list = [] ; this._pendingInsertion = [] ; this._pendingRemoval = [] ; } , add: function (child){ if (this._list.indexOf(child) === -1 && this._pendingInsertion.indexOf(child) === -1) { this._pendingInsertion.push(child); } return child; } , preUpdate: function (time, delta){ var toRemove = _AN_Read_length('length', this._pendingRemoval); var toInsert = _AN_Read_length('length', this._pendingInsertion); if (toRemove === 0 && toInsert === 0) { return ; } var i; var gameObject; for (i = 0; i < toRemove; i++ ){ gameObject = this._pendingRemoval[i]; var index = this._list.indexOf(gameObject); if (index > -1) { this._list.splice(index, 1); } } this._list = this._list.concat(this._pendingInsertion.splice(0)); this._pendingRemoval.length = 0; this._pendingInsertion.length = 0; } , update: function (time, delta){ for (var i = 0; i < (_AN_Read_length('length', this._list)); i++ ){ var gameObject = this._list[i]; if (gameObject.active) { gameObject.preUpdate.call(gameObject, time, delta); } } } , remove: function (child){ var index = this._list.indexOf(child); if (index !== -1) { this._list.splice(index, 1); } return child; } , removeAll: function (){ var i = _AN_Read_length('length', this._list); while (i-- ){ this.remove(this._list[i]); } return this; } , shutdown: function (){ this.removeAll(); this._list.length = 0; this._pendingRemoval.length = 0; this._pendingInsertion.length = 0; } , destroy: function (){ this.shutdown(); } } ); module.exports = UpdateList;