clientEvent.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { _decorator } from "cc";
  2. const { ccclass, property } = _decorator;
  3. @ccclass("ClientEvent")
  4. export class ClientEvent {
  5. private static _handlers: { [key: string]: any[] } = {};
  6. /**
  7. * 监听事件
  8. * @param {string} eventName 事件名称
  9. * @param {function} handler 监听函数
  10. * @param {object} target 监听目标
  11. */
  12. public static on (eventName: string, handler: Function, target: any) {
  13. var objHandler: {} = {handler: handler, target: target};
  14. var handlerList: Array<any> = ClientEvent._handlers[eventName];
  15. if (!handlerList) {
  16. handlerList = [];
  17. ClientEvent._handlers[eventName] = handlerList;
  18. }
  19. for (var i = 0; i < handlerList.length; i++) {
  20. if (!handlerList[i]) {
  21. handlerList[i] = objHandler;
  22. return i;
  23. }
  24. }
  25. handlerList.push(objHandler);
  26. return handlerList.length;
  27. };
  28. /**
  29. * 取消监听
  30. * @param {string} eventName 监听事件
  31. * @param {function} handler 监听函数
  32. * @param {object} target 监听目标
  33. */
  34. public static off (eventName: string, handler: Function, target: any) {
  35. var handlerList = ClientEvent._handlers[eventName];
  36. if (!handlerList) {
  37. return;
  38. }
  39. for (var i = 0; i < handlerList.length; i++) {
  40. var oldObj = handlerList[i];
  41. if(target && oldObj.target === target) {
  42. handlerList.splice(i, 1);
  43. break
  44. }
  45. // if (oldObj.handler === handler && (!target || target === oldObj.target)) {
  46. // handlerList.splice(i, 1);
  47. // break;
  48. // }
  49. }
  50. };
  51. /**
  52. * 分发事件
  53. * @param {string} eventName 分发事件名
  54. * @param {...any} params 分发事件参数
  55. */
  56. public static dispatchEvent (eventName: string, ...args: any) {
  57. var handlerList = ClientEvent._handlers[eventName];
  58. var args1 = [];
  59. var i;
  60. for (i = 1; i < arguments.length; i++) {
  61. args1.push(arguments[i]);
  62. }
  63. if (!handlerList) {
  64. return;
  65. }
  66. for (i = 0; i < handlerList.length; i++) {
  67. var objHandler = handlerList[i];
  68. if (objHandler.handler) {
  69. objHandler.handler.apply(objHandler.target, args1);
  70. }
  71. }
  72. };
  73. /**
  74. * 取消监听
  75. * @param {string} eventName 监听事件
  76. * @param {function} handler 监听函数
  77. * @param {object} target 监听目标
  78. */
  79. public static offAll (eventName: string) {
  80. ClientEvent._handlers[eventName] = null;
  81. };
  82. }