clientEvent.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 (oldObj.handler === handler && (!target || target === oldObj.target)) {
  42. handlerList.splice(i, 1);
  43. break;
  44. }
  45. }
  46. };
  47. /**
  48. * 分发事件
  49. * @param {string} eventName 分发事件名
  50. * @param {...any} params 分发事件参数
  51. */
  52. public static dispatchEvent (eventName: string, ...args: any) {
  53. var handlerList = ClientEvent._handlers[eventName];
  54. var args1 = [];
  55. var i;
  56. for (i = 1; i < arguments.length; i++) {
  57. args1.push(arguments[i]);
  58. }
  59. if (!handlerList) {
  60. return;
  61. }
  62. for (i = 0; i < handlerList.length; i++) {
  63. var objHandler = handlerList[i];
  64. if (objHandler.handler) {
  65. objHandler.handler.apply(objHandler.target, args1);
  66. }
  67. }
  68. };
  69. }