clientEvent.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. }