Implemented my own LinkedList class to make the new Input Handler easier to work with. And also just generally useful to have too.

This commit is contained in:
Richard Davey
2013-09-08 11:24:41 +01:00
parent fe6664eac7
commit 78598ae54a
9 changed files with 360 additions and 587 deletions
+3
View File
@@ -205,6 +205,9 @@ Phaser.Group.prototype = {
* @param {string} index The <code>string</code> name of the member variable you want to sort on. Default value is "z".
* @param {number} order A <code>Group</code> constant that defines the sort order. Possible values are <code>Group.ASCENDING</code> and <code>Group.DESCENDING</code>. Default value is <code>Group.ASCENDING</code>.
*/
// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.c
sort: function (index, order) {
// if (typeof index === "undefined") { index = 'z'; }
// if (typeof order === "undefined") { order = Phaser.Types.SORT_ASCENDING; }
+179
View File
@@ -0,0 +1,179 @@
Phaser.LinkedList = function () {
};
Phaser.LinkedList.prototype = {
_iNext: null,
_iPrev: null,
first: null,
last: null,
sprite: { name: 'HD' },
add: function (child) {
// If the list is empty
if (this.first == null && this.last == null)
{
this.first = child;
this.last = child;
this._iNext = child;
child._iPrev = this;
return;
}
// Get gets appended to the end of the list, regardless of anything, and it won't have any children of its own (non-nested list)
this.last._iNext = child;
child._iPrev = this.last;
this.last = child;
},
remove: function (child) {
// If the list is empty
if (this.first == null && this.last == null)
{
return;
}
// The only node?
if (this.first == child && this.last == child)
{
this.first = null;
this.last = null;
this._iNext = null;
child._iNext = null;
child._iPrev = null;
return;
}
var childPrev = child._iPrev;
// Tail node?
if (child._iNext)
{
// Has another node after it?
child._iNext._iPrev = child._iPrev;
}
childPrev._iNext = child._iNext;
},
dump: function () {
console.log("\nNode\t\t|\t\tNext\t\t|\t\tPrev\t\t|\t\tFirst\t\t|\t\tLast");
console.log("\t\t\t|\t\t\t\t\t|\t\t\t\t\t|\t\t\t\t\t|");
var nameNext = '-';
var namePrev = '-';
var nameFirst = '-';
var nameLast = '-';
if (this._iNext)
{
nameNext = this._iNext.sprite.name;
}
if (this._iPrev)
{
namePrev = this._iPrev.sprite.name;
}
if (this.first)
{
nameFirst = this.first.sprite.name;
}
if (this.last)
{
nameLast = this.last.sprite.name;
}
if (typeof nameNext === 'undefined')
{
nameNext = '-';
}
if (typeof namePrev === 'undefined')
{
namePrev = '-';
}
if (typeof nameFirst === 'undefined')
{
nameFirst = '-';
}
if (typeof nameLast === 'undefined')
{
nameLast = '-';
}
console.log('HD' + '\t\t\t|\t\t' + nameNext + '\t\t\t|\t\t' + namePrev + '\t\t\t|\t\t' + nameFirst + '\t\t\t|\t\t' + nameLast);
var entity = this;
var testObject = entity.last._iNext;
entity = entity.first;
do
{
var name = entity.sprite.name || '*';
var nameNext = '-';
var namePrev = '-';
var nameFirst = '-';
var nameLast = '-';
if (entity._iNext)
{
nameNext = entity._iNext.sprite.name;
}
if (entity._iPrev)
{
namePrev = entity._iPrev.sprite.name;
}
if (entity.first)
{
nameFirst = entity.first.sprite.name;
}
if (entity.last)
{
nameLast = entity.last.sprite.name;
}
if (typeof nameNext === 'undefined')
{
nameNext = '-';
}
if (typeof namePrev === 'undefined')
{
namePrev = '-';
}
if (typeof nameFirst === 'undefined')
{
nameFirst = '-';
}
if (typeof nameLast === 'undefined')
{
nameLast = '-';
}
console.log(name + '\t\t\t|\t\t' + nameNext + '\t\t\t|\t\t' + namePrev + '\t\t\t|\t\t' + nameFirst + '\t\t\t|\t\t' + nameLast);
entity = entity._iNext;
}
while(entity != testObject)
}
};