EventBus.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { EventTarget } from 'cc';
  2. /**
  3. * 全局事件总线,用于模块间解耦通信。
  4. */
  5. export enum GameEvents {
  6. // 游戏状态事件
  7. GAME_START = 'GAME_START',
  8. GAME_PAUSE = 'GAME_PAUSE',
  9. GAME_RESUME = 'GAME_RESUME',
  10. GAME_SUCCESS = 'GAME_SUCCESS',
  11. GAME_DEFEAT = 'GAME_DEFEAT',
  12. // 游戏重置事件
  13. GAME_RESTART = 'GAME_RESTART',
  14. GAME_RESET_REQUEST = 'GAME_RESET_REQUEST',
  15. GAME_RESET_COMPLETE = 'GAME_RESET_COMPLETE',
  16. // 组件重置事件
  17. RESET_GAME_MANAGER = 'RESET_GAME_MANAGER',
  18. RESET_ENEMY_CONTROLLER = 'RESET_ENEMY_CONTROLLER',
  19. RESET_BALL_CONTROLLER = 'RESET_BALL_CONTROLLER',
  20. RESET_BLOCK_MANAGER = 'RESET_BLOCK_MANAGER',
  21. RESET_BLOCK_SELECTION = 'RESET_BLOCK_SELECTION',
  22. RESET_WALL_HEALTH = 'RESET_WALL_HEALTH',
  23. RESET_GAME_PAUSE = 'RESET_GAME_PAUSE',
  24. RESET_UI_STATES = 'RESET_UI_STATES',
  25. RESET_ENERGY_SYSTEM = 'RESET_ENERGY_SYSTEM',
  26. // 游戏对象清理事件
  27. CLEAR_ALL_BULLETS = 'CLEAR_ALL_BULLETS',
  28. CLEAR_ALL_ENEMIES = 'CLEAR_ALL_ENEMIES',
  29. CLEAR_ALL_GAME_OBJECTS = 'CLEAR_ALL_GAME_OBJECTS',
  30. // UI事件
  31. SHOP_UPDATED = 'SHOP_UPDATED',
  32. BLOCK_SELECTION_OPEN = 'BLOCK_SELECTION_OPEN',
  33. BLOCK_SELECTION_CLOSE = 'BLOCK_SELECTION_CLOSE',
  34. SHOW_GAME_BLOCK_SELECTION = 'SHOW_GAME_BLOCK_SELECTION',
  35. SHOW_BLOCK_SELECTION = 'SHOW_BLOCK_SELECTION',
  36. // 敌人控制事件
  37. ENEMY_SPAWN_START = 'ENEMY_SPAWN_START',
  38. ENEMY_SPAWN_STOP = 'ENEMY_SPAWN_STOP',
  39. ENEMY_ALL_PAUSE = 'ENEMY_ALL_PAUSE',
  40. ENEMY_ALL_RESUME = 'ENEMY_ALL_RESUME',
  41. // 墙体事件
  42. WALL_HEALTH_CHANGED = 'WALL_HEALTH_CHANGED',
  43. WALL_DESTROYED = 'WALL_DESTROYED',
  44. WALL_TAKE_DAMAGE = 'WALL_TAKE_DAMAGE',
  45. // 球控制事件
  46. BALL_CREATE = 'BALL_CREATE',
  47. BALL_START = 'BALL_START',
  48. BALL_CREATE_ADDITIONAL = 'BALL_CREATE_ADDITIONAL',
  49. BALL_FIRE_BULLET = 'BALL_FIRE_BULLET',
  50. // 敌人控制事件
  51. ENEMY_TAKE_DAMAGE = 'ENEMY_TAKE_DAMAGE',
  52. ENEMY_SPAWN_REQUEST = 'ENEMY_SPAWN_REQUEST',
  53. ENEMY_GET_NEAREST = 'ENEMY_GET_NEAREST',
  54. ENEMY_UPDATE_COUNT = 'ENEMY_UPDATE_COUNT',
  55. ENEMY_CHECK_ACTIVE = 'ENEMY_CHECK_ACTIVE',
  56. ENEMY_CHECK_GAME_STARTED = 'ENEMY_CHECK_GAME_STARTED',
  57. ENEMY_GET_COUNT = 'ENEMY_GET_COUNT',
  58. ENEMY_START_WAVE = 'ENEMY_START_WAVE',
  59. ENEMY_START_GAME = 'ENEMY_START_GAME',
  60. ENEMY_SHOW_START_WAVE_PROMPT = 'ENEMY_SHOW_START_WAVE_PROMPT',
  61. // 游戏状态检查事件
  62. GAME_CHECK_OVER = 'GAME_CHECK_OVER',
  63. // 方块选择事件
  64. BLOCK_SELECTION_HIDE = 'BLOCK_SELECTION_HIDE',
  65. BLOCK_SELECTION_SHOW = 'BLOCK_SELECTION_SHOW',
  66. // 子弹事件
  67. BULLET_CREATE_REQUEST = 'BULLET_CREATE_REQUEST',
  68. BULLET_HIT_ENEMY = 'BULLET_HIT_ENEMY'
  69. }
  70. export default class EventBus extends EventTarget {
  71. private static _instance: EventBus;
  72. private constructor() {
  73. super();
  74. }
  75. public static getInstance(): EventBus {
  76. if (!this._instance) {
  77. this._instance = new EventBus();
  78. }
  79. return this._instance;
  80. }
  81. // 重写emit方法,添加黄色字体的日志输出
  82. emit(type: string, ...args: any[]): void {
  83. console.log(`%c[EventBus] 发送事件: ${type}`, 'color: #FFD700; font-weight: bold;', args.length > 0 ? args : '');
  84. super.emit(type, ...args);
  85. }
  86. }