EventBus.ts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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_PAUSE_SKILL_SELECTION = 'GAME_PAUSE_SKILL_SELECTION', // 技能选择时暂停(小球完全停止)
  10. GAME_PAUSE_BLOCK_SELECTION = 'GAME_PAUSE_BLOCK_SELECTION', // 底板选择时暂停(小球继续运动)
  11. GAME_RESUME = 'GAME_RESUME',
  12. GAME_RESUME_SKILL_SELECTION = 'GAME_RESUME_SKILL_SELECTION', // 技能选择结束后恢复
  13. GAME_RESUME_BLOCK_SELECTION = 'GAME_RESUME_BLOCK_SELECTION', // 底板选择结束后恢复
  14. GAME_SUCCESS = 'GAME_SUCCESS',
  15. GAME_DEFEAT = 'GAME_DEFEAT',
  16. // 游戏重置事件
  17. GAME_RESTART = 'GAME_RESTART',
  18. GAME_RESET_REQUEST = 'GAME_RESET_REQUEST',
  19. GAME_RESET_COMPLETE = 'GAME_RESET_COMPLETE',
  20. // 组件重置事件
  21. RESET_GAME_MANAGER = 'RESET_GAME_MANAGER',
  22. RESET_ENEMY_CONTROLLER = 'RESET_ENEMY_CONTROLLER',
  23. RESET_BALL_CONTROLLER = 'RESET_BALL_CONTROLLER',
  24. RESET_BLOCK_MANAGER = 'RESET_BLOCK_MANAGER',
  25. RESET_BLOCK_SELECTION = 'RESET_BLOCK_SELECTION',
  26. RESET_WALL_HEALTH = 'RESET_WALL_HEALTH',
  27. RESET_GAME_PAUSE = 'RESET_GAME_PAUSE',
  28. RESET_UI_STATES = 'RESET_UI_STATES',
  29. RESET_ENERGY_SYSTEM = 'RESET_ENERGY_SYSTEM',
  30. // 游戏对象清理事件
  31. CLEAR_ALL_BULLETS = 'CLEAR_ALL_BULLETS',
  32. CLEAR_ALL_ENEMIES = 'CLEAR_ALL_ENEMIES',
  33. CLEAR_ALL_GAME_OBJECTS = 'CLEAR_ALL_GAME_OBJECTS',
  34. // UI事件
  35. UPGRADE_UPDATED = 'UPGRADE_UPDATED',
  36. RETURN_TO_MAIN_MENU = 'RETURN_TO_MAIN_MENU',
  37. CURRENCY_CHANGED = 'CURRENCY_CHANGED',
  38. UI_PANEL_SWITCHED = 'UI_PANEL_SWITCHED',
  39. UPGRADE_UI_OPENED = 'UPGRADE_UI_OPENED',
  40. UPGRADE_PANEL_OPENED = 'UPGRADE_PANEL_OPENED',
  41. APP_STATE_CHANGED = 'APP_STATE_CHANGED',
  42. SHOW_GAIN_UI = 'SHOW_GAIN_UI',
  43. GAIN_UI_CONFIRMED = 'GAIN_UI_CONFIRMED',
  44. // 新增:奖励动画与武器解锁事件
  45. REWARD_ANIMATION_COMPLETED = 'REWARD_ANIMATION_COMPLETED',
  46. NEW_WEAPONS_UNLOCKED = 'NEW_WEAPONS_UNLOCKED',
  47. // UI状态切换事件(根据游戏管理文档)
  48. ENTER_BATTLE_PREPARATION = 'ENTER_BATTLE_PREPARATION', // 进入备战阶段
  49. ENTER_PLAYING_STATE = 'ENTER_PLAYING_STATE', // 进入游玩状态
  50. ENTER_GAME_END_STATE = 'ENTER_GAME_END_STATE', // 进入游戏结束状态
  51. // 敌人控制事件(保留实际使用的事件)
  52. // 墙体事件
  53. WALL_HEALTH_CHANGED = 'WALL_HEALTH_CHANGED',
  54. WALL_DESTROYED = 'WALL_DESTROYED',
  55. WALL_TAKE_DAMAGE = 'WALL_TAKE_DAMAGE',
  56. // 球控制事件
  57. BALL_CREATE = 'BALL_CREATE',
  58. BALL_START = 'BALL_START',
  59. BALL_CREATE_ADDITIONAL = 'BALL_CREATE_ADDITIONAL',
  60. BALL_FIRE_BULLET = 'BALL_FIRE_BULLET',
  61. // 敌人控制事件
  62. ENEMY_GET_NEAREST = 'ENEMY_GET_NEAREST',
  63. ENEMY_UPDATE_COUNT = 'ENEMY_UPDATE_COUNT',
  64. ENEMY_SPAWNING_STARTED = 'ENEMY_SPAWNING_STARTED',
  65. ENEMY_SPAWNING_STOPPED = 'ENEMY_SPAWNING_STOPPED',
  66. ENEMY_STEALTH_START = 'ENEMY_STEALTH_START',
  67. ENEMY_STEALTH_END = 'ENEMY_STEALTH_END',
  68. // 伤害事件
  69. APPLY_DAMAGE_TO_ENEMY = 'APPLY_DAMAGE_TO_ENEMY',
  70. BURN_EFFECT_ENDED = 'BURN_EFFECT_ENDED',
  71. ENEMY_DAMAGE_WALL = 'ENEMY_DAMAGE_WALL',
  72. ENEMY_START_WAVE = 'ENEMY_START_WAVE',
  73. ENEMY_START_GAME = 'ENEMY_START_GAME',
  74. ENEMY_SHOW_START_WAVE_PROMPT = 'ENEMY_SHOW_START_WAVE_PROMPT',
  75. // 游戏状态检查事件
  76. GAME_CHECK_OVER = 'GAME_CHECK_OVER',
  77. // 方块生成事件
  78. GENERATE_BLOCKS = 'GENERATE_BLOCKS',
  79. WAVE_COMPLETED = 'WAVE_COMPLETED',
  80. SETUP_BLOCK_DRAG_EVENTS = 'SETUP_BLOCK_DRAG_EVENTS',
  81. // 子弹事件
  82. BULLET_CREATE_REQUEST = 'BULLET_CREATE_REQUEST',
  83. BULLET_HIT_ENEMY = 'BULLET_HIT_ENEMY',
  84. // 方块拖拽事件
  85. BLOCK_DRAG_START = 'BLOCK_DRAG_START',
  86. BLOCK_DRAG_END = 'BLOCK_DRAG_END',
  87. // 全局强制结束所有拖拽(例如教程自动放置期间)
  88. FORCE_END_ALL_DRAGS = 'FORCE_END_ALL_DRAGS',
  89. // 方块选择事件
  90. BLOCK_SELECTION_CONFIRMED = 'BLOCK_SELECTION_CONFIRMED',
  91. // 教程事件
  92. TUTORIAL_BLOCK_1_PLACED = 'TUTORIAL_BLOCK_1_PLACED',
  93. TUTORIAL_BLOCK_2_PLACED = 'TUTORIAL_BLOCK_2_PLACED',
  94. TUTORIAL_BLOCK_3_PLACED = 'TUTORIAL_BLOCK_3_PLACED',
  95. // 添加:第二次选择的拖拽完成事件
  96. TUTORIAL_BLOCK_4_PLACED = 'TUTORIAL_BLOCK_4_PLACED',
  97. TUTORIAL_BLOCK_5_PLACED = 'TUTORIAL_BLOCK_5_PLACED',
  98. // Toast提示事件// Toast提示事件
  99. SHOW_TOAST = 'SHOW_TOAST',
  100. HIDE_TOAST = 'HIDE_TOAST',
  101. SHOW_RESOURCE_TOAST = 'SHOW_RESOURCE_TOAST',
  102. HIDE_RESOURCE_TOAST = 'HIDE_RESOURCE_TOAST',
  103. // 资源预加载事件
  104. RESOURCE_PRELOAD_START = 'RESOURCE_PRELOAD_START',
  105. RESOURCE_PRELOAD_PROGRESS = 'RESOURCE_PRELOAD_PROGRESS',
  106. RESOURCE_PRELOAD_COMPLETE = 'RESOURCE_PRELOAD_COMPLETE',
  107. RESOURCE_PRELOAD_ERROR = 'RESOURCE_PRELOAD_ERROR'
  108. }
  109. export default class EventBus extends EventTarget {
  110. private static _instance: EventBus;
  111. private constructor() {
  112. super();
  113. }
  114. public static getInstance(): EventBus {
  115. if (!this._instance) {
  116. this._instance = new EventBus();
  117. }
  118. return this._instance;
  119. }
  120. }