(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/script/mk/system/EventSystem.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, 'aab27lcX9pAz5SQ16UkErbh', 'EventSystem'); // script/mk/system/EventSystem.ts "use strict"; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", { value: true }); /** * 游戏事件管理类 * @author 冯聪 */ var EventSystem = /** @class */ (function () { function EventSystem() { /** 监听数组 */ this.listeners = {}; } /** * 注册事件 * @param name 事件名称 * @param callback 回调函数 * @param target 目标脚本(this) */ EventSystem.prototype.register = function (name, callback, target) { //如果没有该事件 if (!this.listeners[name]) { this.listeners[name] = []; } var observers = this.listeners[name]; var length = observers.length; for (var i = 0; i < length; i++) { var observer = observers[i]; if (observer.compare(target)) { console.warn("[EventMgr]重复添加监听,请检查事件:", name); return; } } this.listeners[name].push(new Observer(callback, target)); }; /** * 移除事件 * @param name 事件名称 * @param callback 回调函数 * @param target 目标脚本(this) */ EventSystem.prototype.remove = function (name, callback, target) { var observers = this.listeners[name]; if (!observers) return; var length = observers.length; for (var i = 0; i < length; i++) { var observer = observers[i]; if (observer.compare(target)) { observers.splice(i, 1); break; } } if (observers.length == 0) { delete this.listeners[name]; } }; /** * 发送事件 * @param name 事件名称 */ EventSystem.prototype.emit = function (name) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var observers = this.listeners[name]; if (!observers) return; //克隆一个新数组(暂时concat代替),然后分发事件,防止那边remove之后,[0 1] 变成 [1] 然后1号位为undefined var tempObservers = observers.concat(); var length = tempObservers.length; for (var i = 0; i < length; i++) { var observer = tempObservers[i]; observer.notify.apply(observer, __spreadArrays(args, [name])); } //置空释放 tempObservers = null; }; return EventSystem; }()); exports.default = EventSystem; /**事件观察者类*/ var Observer = /** @class */ (function () { /** 构造函数 */ function Observer(callback, target) { /** 回调函数 */ this.callback = null; /** 目标脚本 */ this.target = null; var self = this; self.callback = callback; self.target = target; } /** * 发送通知 * @param args 不定参数 */ Observer.prototype.notify = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var self = this; (_a = self.callback).call.apply(_a, __spreadArrays([self.target], args)); }; /** * 脚本比较 * @param target 绑定的对象脚本 */ Observer.prototype.compare = function (target) { return target == this.target; }; return Observer; }()); cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcc2NyaXB0XFxta1xcc3lzdGVtXFxFdmVudFN5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7O0dBR0c7QUFDSDtJQUFBO1FBRUksV0FBVztRQUNILGNBQVMsR0FBa0MsRUFBRSxDQUFDO0lBc0UxRCxDQUFDO0lBcEVHOzs7OztPQUtHO0lBQ0ksOEJBQVEsR0FBZixVQUFnQixJQUFZLEVBQUUsUUFBa0IsRUFBRSxNQUFXO1FBRXpELFNBQVM7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUM3QjtRQUVELElBQUksU0FBUyxHQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakQsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQzdDLE9BQU87YUFDVjtTQUNKO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksNEJBQU0sR0FBYixVQUFjLElBQVksRUFBRSxRQUFrQixFQUFFLE1BQVc7UUFFdkQsSUFBSSxTQUFTLEdBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDdkIsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixNQUFNO2FBQ1Q7U0FDSjtRQUNELElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLDBCQUFJLEdBQVgsVUFBWSxJQUFZO1FBQUUsY0FBYzthQUFkLFVBQWMsRUFBZCxxQkFBYyxFQUFkLElBQWM7WUFBZCw2QkFBYzs7UUFFcEMsSUFBSSxTQUFTLEdBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFdkIsc0VBQXNFO1FBQ3RFLElBQUksYUFBYSxHQUFlLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuRCxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLFFBQVEsQ0FBQyxNQUFNLE9BQWYsUUFBUSxpQkFBVyxJQUFJLEdBQUUsSUFBSSxJQUFFO1NBQ2xDO1FBQ0QsTUFBTTtRQUNOLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUNMLGtCQUFDO0FBQUQsQ0F6RUEsQUF5RUMsSUFBQTs7QUFFRCxXQUFXO0FBQ1g7SUFPSSxXQUFXO0lBQ1gsa0JBQVksUUFBa0IsRUFBRSxNQUFXO1FBTjNDLFdBQVc7UUFDSCxhQUFRLEdBQWEsSUFBSSxDQUFDO1FBQ2xDLFdBQVc7UUFDSCxXQUFNLEdBQVEsSUFBSSxDQUFDO1FBSXZCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gseUJBQU0sR0FBTjs7UUFBTyxjQUFjO2FBQWQsVUFBYyxFQUFkLHFCQUFjLEVBQWQsSUFBYztZQUFkLHlCQUFjOztRQUNqQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsQ0FBQSxLQUFBLElBQUksQ0FBQyxRQUFRLENBQUEsQ0FBQyxJQUFJLDJCQUFDLElBQUksQ0FBQyxNQUFNLEdBQUssSUFBSSxHQUFFO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSCwwQkFBTyxHQUFQLFVBQVEsTUFBVztRQUNmLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUNMLGVBQUM7QUFBRCxDQTlCQSxBQThCQyxJQUFBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbi8qKlxyXG4gKiDmuLjmiI/kuovku7bnrqHnkIbnsbtcclxuICogQGF1dGhvciDlhq/ogapcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50U3lzdGVtIHtcclxuXHJcbiAgICAvKiog55uR5ZCs5pWw57uEICovXHJcbiAgICBwcml2YXRlIGxpc3RlbmVyczogeyBba2V5OiBzdHJpbmddOiBPYnNlcnZlcltdIH0gPSB7fTtcclxuICAgIFxyXG4gICAgLyoqIFxyXG4gICAgICog5rOo5YaM5LqL5Lu2XHJcbiAgICAgKiBAcGFyYW0gbmFtZSAgICAg5LqL5Lu25ZCN56ewXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sg5Zue6LCD5Ye95pWwXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0ICAg55uu5qCH6ISa5pys77yIdGhpc++8iVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXIobmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIHRhcmdldDogYW55KSB7XHJcblxyXG4gICAgICAgIC8v5aaC5p6c5rKh5pyJ6K+l5LqL5Lu2XHJcbiAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9ic2VydmVyczogT2JzZXJ2ZXJbXSA9IHRoaXMubGlzdGVuZXJzW25hbWVdO1xyXG5cclxuICAgICAgICBsZXQgbGVuZ3RoID0gb2JzZXJ2ZXJzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBvYnNlcnZlciA9IG9ic2VydmVyc1tpXTtcclxuICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNvbXBhcmUodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW0V2ZW50TWdyXemHjeWkjea3u+WKoOebkeWQrCzor7fmo4Dmn6Xkuovku7Y6XCIsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZV0ucHVzaChuZXcgT2JzZXJ2ZXIoY2FsbGJhY2ssIHRhcmdldCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog56e76Zmk5LqL5Lu2XHJcbiAgICAgKiBAcGFyYW0gbmFtZSAgICAg5LqL5Lu25ZCN56ewXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sg5Zue6LCD5Ye95pWwXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0ICAg55uu5qCH6ISa5pys77yIdGhpcylcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZShuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgdGFyZ2V0OiBhbnkpIHtcclxuXHJcbiAgICAgICAgbGV0IG9ic2VydmVyczogT2JzZXJ2ZXJbXSA9IHRoaXMubGlzdGVuZXJzW25hbWVdO1xyXG4gICAgICAgIGlmICghb2JzZXJ2ZXJzKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IG9ic2VydmVycy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXIgPSBvYnNlcnZlcnNbaV07XHJcbiAgICAgICAgICAgIGlmIChvYnNlcnZlci5jb21wYXJlKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVycy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlj5HpgIHkuovku7ZcclxuICAgICAqIEBwYXJhbSBuYW1lIOS6i+S7tuWQjeensFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW1pdChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XHJcblxyXG4gICAgICAgIGxldCBvYnNlcnZlcnM6IE9ic2VydmVyW10gPSB0aGlzLmxpc3RlbmVyc1tuYW1lXTtcclxuICAgICAgICBpZiAoIW9ic2VydmVycykgcmV0dXJuO1xyXG5cclxuICAgICAgICAvL+WFi+mahuS4gOS4quaWsOaVsOe7hCjmmoLml7Zjb25jYXTku6Pmm78pLOeEtuWQjuWIhuWPkeS6i+S7tizpmLLmraLpgqPovrlyZW1vdmXkuYvlkI4sWzAgMV0g5Y+Y5oiQIFsxXSDnhLblkI4x5Y+35L2N5Li6dW5kZWZpbmVkXHJcbiAgICAgICAgbGV0IHRlbXBPYnNlcnZlcnM6IE9ic2VydmVyW10gPSBvYnNlcnZlcnMuY29uY2F0KCk7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRlbXBPYnNlcnZlcnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IG9ic2VydmVyID0gdGVtcE9ic2VydmVyc1tpXTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIubm90aWZ5KC4uLmFyZ3MsIG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+e9ruepuumHiuaUvlxyXG4gICAgICAgIHRlbXBPYnNlcnZlcnMgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKirkuovku7bop4Llr5/ogIXnsbsqL1xyXG5jbGFzcyBPYnNlcnZlciB7XHJcblxyXG4gICAgLyoqIOWbnuiwg+WHveaVsCAqL1xyXG4gICAgcHJpdmF0ZSBjYWxsYmFjazogRnVuY3Rpb24gPSBudWxsO1xyXG4gICAgLyoqIOebruagh+iEmuacrCAqL1xyXG4gICAgcHJpdmF0ZSB0YXJnZXQ6IGFueSA9IG51bGw7XHJcblxyXG4gICAgLyoqIOaehOmAoOWHveaVsCAqL1xyXG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2s6IEZ1bmN0aW9uLCB0YXJnZXQ6IGFueSkge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlj5HpgIHpgJrnn6VcclxuICAgICAqIEBwYXJhbSBhcmdzIOS4jeWumuWPguaVsFxyXG4gICAgICovXHJcbiAgICBub3RpZnkoLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5jYWxsYmFjay5jYWxsKHNlbGYudGFyZ2V0LCAuLi5hcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiEmuacrOavlOi+g1xyXG4gICAgICogQHBhcmFtIHRhcmdldCDnu5HlrprnmoTlr7nosaHohJrmnKxcclxuICAgICAqL1xyXG4gICAgY29tcGFyZSh0YXJnZXQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQgPT0gdGhpcy50YXJnZXQ7XHJcbiAgICB9XHJcbn0iXX0=