EventSystem.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/script/mk/system/EventSystem.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
  12. cc._RF.push(module, 'aab27lcX9pAz5SQ16UkErbh', 'EventSystem');
  13. // script/mk/system/EventSystem.ts
  14. "use strict";
  15. var __spreadArrays = (this && this.__spreadArrays) || function () {
  16. for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  17. for (var r = Array(s), k = 0, i = 0; i < il; i++)
  18. for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
  19. r[k] = a[j];
  20. return r;
  21. };
  22. Object.defineProperty(exports, "__esModule", { value: true });
  23. /**
  24. * 游戏事件管理类
  25. * @author 冯聪
  26. */
  27. var EventSystem = /** @class */ (function () {
  28. function EventSystem() {
  29. /** 监听数组 */
  30. this.listeners = {};
  31. }
  32. /**
  33. * 注册事件
  34. * @param name 事件名称
  35. * @param callback 回调函数
  36. * @param target 目标脚本(this)
  37. */
  38. EventSystem.prototype.register = function (name, callback, target) {
  39. //如果没有该事件
  40. if (!this.listeners[name]) {
  41. this.listeners[name] = [];
  42. }
  43. var observers = this.listeners[name];
  44. var length = observers.length;
  45. for (var i = 0; i < length; i++) {
  46. var observer = observers[i];
  47. if (observer.compare(target)) {
  48. console.warn("[EventMgr]重复添加监听,请检查事件:", name);
  49. return;
  50. }
  51. }
  52. this.listeners[name].push(new Observer(callback, target));
  53. };
  54. /**
  55. * 移除事件
  56. * @param name 事件名称
  57. * @param callback 回调函数
  58. * @param target 目标脚本(this)
  59. */
  60. EventSystem.prototype.remove = function (name, callback, target) {
  61. var observers = this.listeners[name];
  62. if (!observers)
  63. return;
  64. var length = observers.length;
  65. for (var i = 0; i < length; i++) {
  66. var observer = observers[i];
  67. if (observer.compare(target)) {
  68. observers.splice(i, 1);
  69. break;
  70. }
  71. }
  72. if (observers.length == 0) {
  73. delete this.listeners[name];
  74. }
  75. };
  76. /**
  77. * 发送事件
  78. * @param name 事件名称
  79. */
  80. EventSystem.prototype.emit = function (name) {
  81. var args = [];
  82. for (var _i = 1; _i < arguments.length; _i++) {
  83. args[_i - 1] = arguments[_i];
  84. }
  85. var observers = this.listeners[name];
  86. if (!observers)
  87. return;
  88. //克隆一个新数组(暂时concat代替),然后分发事件,防止那边remove之后,[0 1] 变成 [1] 然后1号位为undefined
  89. var tempObservers = observers.concat();
  90. var length = tempObservers.length;
  91. for (var i = 0; i < length; i++) {
  92. var observer = tempObservers[i];
  93. observer.notify.apply(observer, __spreadArrays(args, [name]));
  94. }
  95. //置空释放
  96. tempObservers = null;
  97. };
  98. return EventSystem;
  99. }());
  100. exports.default = EventSystem;
  101. /**事件观察者类*/
  102. var Observer = /** @class */ (function () {
  103. /** 构造函数 */
  104. function Observer(callback, target) {
  105. /** 回调函数 */
  106. this.callback = null;
  107. /** 目标脚本 */
  108. this.target = null;
  109. var self = this;
  110. self.callback = callback;
  111. self.target = target;
  112. }
  113. /**
  114. * 发送通知
  115. * @param args 不定参数
  116. */
  117. Observer.prototype.notify = function () {
  118. var _a;
  119. var args = [];
  120. for (var _i = 0; _i < arguments.length; _i++) {
  121. args[_i] = arguments[_i];
  122. }
  123. var self = this;
  124. (_a = self.callback).call.apply(_a, __spreadArrays([self.target], args));
  125. };
  126. /**
  127. * 脚本比较
  128. * @param target 绑定的对象脚本
  129. */
  130. Observer.prototype.compare = function (target) {
  131. return target == this.target;
  132. };
  133. return Observer;
  134. }());
  135. cc._RF.pop();
  136. }
  137. if (nodeEnv) {
  138. __define(__module.exports, __require, __module);
  139. }
  140. else {
  141. __quick_compile_project__.registerModuleFunc(__filename, function () {
  142. __define(__module.exports, __require, __module);
  143. });
  144. }
  145. })();
  146. //# 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=