event management update
parent
062c5daa03
commit
15914c44db
|
@ -106,6 +106,7 @@ GameLib.Event.REGISTER_DEPENDENCIES = 0x58;
|
||||||
GameLib.Event.GAME_LOADED = 0x59;
|
GameLib.Event.GAME_LOADED = 0x59;
|
||||||
GameLib.Event.GAME_RESTART = 0x5a;
|
GameLib.Event.GAME_RESTART = 0x5a;
|
||||||
GameLib.Event.LOAD_PROGRESS = 0x5b;
|
GameLib.Event.LOAD_PROGRESS = 0x5b;
|
||||||
|
GameLib.Event.ENTITY_LOADED = 0x5c;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns string name of event ID
|
* Returns string name of event ID
|
||||||
|
@ -207,6 +208,7 @@ GameLib.Event.GetEventName = function(number) {
|
||||||
case 0x59 : return 'game_loaded';
|
case 0x59 : return 'game_loaded';
|
||||||
case 0x5a : return 'game_restart';
|
case 0x5a : return 'game_restart';
|
||||||
case 0x5b : return 'load_progress';
|
case 0x5b : return 'load_progress';
|
||||||
|
case 0x5c : return 'entity_loaded';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,14 +438,44 @@ GameLib.Event.Emit = function(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We need to execute all the callbacks, but not execute them twice, but also keep in mind they can remove
|
||||||
|
* themselves during execution
|
||||||
|
*/
|
||||||
|
var length = GameLib.Event.Subscriptions[eventName].length;
|
||||||
|
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
|
||||||
|
var object = GameLib.Event.Subscriptions[eventName][i];
|
||||||
|
|
||||||
|
if (object.fn && object.executed === false) {
|
||||||
|
object.fn(data, clientCallback, clientErrorCallback);
|
||||||
|
object.executed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (length !== GameLib.Event.Subscriptions[eventName].length) {
|
||||||
|
/**
|
||||||
|
* this callback removed a subscription - reset i and reset the length
|
||||||
|
*/
|
||||||
|
i = 0;
|
||||||
|
length = GameLib.Event.Subscriptions[eventName].length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GameLib.Event.Subscriptions[eventName].map(
|
GameLib.Event.Subscriptions[eventName].map(
|
||||||
function(callback) {
|
function(object){
|
||||||
if (callback) {
|
object.executed = false;
|
||||||
callback(data, clientCallback, clientErrorCallback);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
//
|
||||||
|
// GameLib.Event.Subscriptions[eventName].map(
|
||||||
|
// function(callback) {
|
||||||
|
// if (callback) {
|
||||||
|
// callback(data, clientCallback, clientErrorCallback);
|
||||||
|
// count++;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// )
|
||||||
} else {
|
} else {
|
||||||
if (clientCallback) {
|
if (clientCallback) {
|
||||||
/**
|
/**
|
||||||
|
@ -468,10 +500,20 @@ GameLib.Event.Subscribe = function(
|
||||||
) {
|
) {
|
||||||
|
|
||||||
if (GameLib.Event.Subscriptions.hasOwnProperty(eventName)) {
|
if (GameLib.Event.Subscriptions.hasOwnProperty(eventName)) {
|
||||||
GameLib.Event.Subscriptions[eventName].push(fn);
|
GameLib.Event.Subscriptions[eventName].push(
|
||||||
|
{
|
||||||
|
fn : fn,
|
||||||
|
executed : false
|
||||||
|
}
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
GameLib.Event.Subscriptions[eventName] = [];
|
GameLib.Event.Subscriptions[eventName] = [];
|
||||||
GameLib.Event.Subscriptions[eventName].push(fn);
|
GameLib.Event.Subscriptions[eventName].push(
|
||||||
|
{
|
||||||
|
fn : fn,
|
||||||
|
executed : false
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -480,8 +522,23 @@ GameLib.Event.Subscribe = function(
|
||||||
return {
|
return {
|
||||||
fn : fn,
|
fn : fn,
|
||||||
remove : function() {
|
remove : function() {
|
||||||
|
|
||||||
|
var index = GameLib.Event.Subscriptions[eventName].reduce(
|
||||||
|
function(result, object, index) {
|
||||||
|
if (object.fn === fn) {
|
||||||
|
result = index;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
-1
|
||||||
|
);
|
||||||
|
|
||||||
|
if (index === -1) {
|
||||||
|
throw new Error('could not remove subscription');
|
||||||
|
}
|
||||||
|
|
||||||
GameLib.Event.Subscriptions[eventName].splice(
|
GameLib.Event.Subscriptions[eventName].splice(
|
||||||
GameLib.Event.Subscriptions[eventName].indexOf(fn),
|
index,
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue