games/Legend-of-the-Water-Cup/assets/scripts/Dispatcher.ts

63 lines
1.3 KiB
TypeScript

export default class Dispatcher {
dict: Object
constructor() {
this.dict = new Object();
}
//添加一个回调函数
add(type, callback, thisObj) {
var callbacks = this.dict[type];
if (callbacks) {
if (this.getIndex(callbacks, callback, thisObj) != -1)
return;
}
else {
callbacks = new Array();
this.dict[type] = callbacks;
}
callbacks.push({ 'callback': callback, 'thisObj': thisObj });
}
getIndex(array, callback, thisObj) {
for (var i = 0; i < array.length; i++) {
var data = array[i];
if (data['callback'] == callback && data['thisObj'] == thisObj) {
return i;
}
}
return -1;
}
//删除一个回调函数
remove(type, callback, thisObj) {
//没有该类型的数组
if (!this.dict[type]) {
return;
}
var callbacks = this.dict[type];
if (!callbacks) {
return;
}
var index = this.getIndex(callbacks, callback, thisObj);
if (index != -1) {
callbacks.splice(index, 1);
}
if (callbacks.length <= 0) {
delete this.dict[type];
}
}
//执行回调
execute(type, params = null) {
var callbacks = this.dict[type];
if (callbacks == undefined) return;
for (var i = 0; i < callbacks.length; i++) {
var data = callbacks[i];
var callback = data['callback']
var thisObj = data['thisObj']
callback.apply(thisObj, [params])
}
}
}