import { EventTarget } from 'cc'; /** * 全局事件总线,用于模块间解耦通信。 */ export enum GameEvents { // 游戏状态事件 GAME_START = 'GAME_START', GAME_PAUSE = 'GAME_PAUSE', GAME_RESUME = 'GAME_RESUME', GAME_SUCCESS = 'GAME_SUCCESS', GAME_DEFEAT = 'GAME_DEFEAT', // 游戏重置事件 GAME_RESTART = 'GAME_RESTART', GAME_RESET_REQUEST = 'GAME_RESET_REQUEST', GAME_RESET_COMPLETE = 'GAME_RESET_COMPLETE', // 组件重置事件 RESET_GAME_MANAGER = 'RESET_GAME_MANAGER', RESET_ENEMY_CONTROLLER = 'RESET_ENEMY_CONTROLLER', RESET_BALL_CONTROLLER = 'RESET_BALL_CONTROLLER', RESET_BLOCK_MANAGER = 'RESET_BLOCK_MANAGER', RESET_BLOCK_SELECTION = 'RESET_BLOCK_SELECTION', RESET_WALL_HEALTH = 'RESET_WALL_HEALTH', RESET_GAME_PAUSE = 'RESET_GAME_PAUSE', RESET_UI_STATES = 'RESET_UI_STATES', RESET_ENERGY_SYSTEM = 'RESET_ENERGY_SYSTEM', // 游戏对象清理事件 CLEAR_ALL_BULLETS = 'CLEAR_ALL_BULLETS', CLEAR_ALL_ENEMIES = 'CLEAR_ALL_ENEMIES', CLEAR_ALL_GAME_OBJECTS = 'CLEAR_ALL_GAME_OBJECTS', // UI事件 SHOP_UPDATED = 'SHOP_UPDATED', BLOCK_SELECTION_OPEN = 'BLOCK_SELECTION_OPEN', BLOCK_SELECTION_CLOSE = 'BLOCK_SELECTION_CLOSE', SHOW_GAME_BLOCK_SELECTION = 'SHOW_GAME_BLOCK_SELECTION', SHOW_BLOCK_SELECTION = 'SHOW_BLOCK_SELECTION', // 敌人控制事件 ENEMY_SPAWN_START = 'ENEMY_SPAWN_START', ENEMY_SPAWN_STOP = 'ENEMY_SPAWN_STOP', ENEMY_ALL_PAUSE = 'ENEMY_ALL_PAUSE', ENEMY_ALL_RESUME = 'ENEMY_ALL_RESUME', // 墙体事件 WALL_HEALTH_CHANGED = 'WALL_HEALTH_CHANGED', WALL_DESTROYED = 'WALL_DESTROYED', WALL_TAKE_DAMAGE = 'WALL_TAKE_DAMAGE', // 球控制事件 BALL_CREATE = 'BALL_CREATE', BALL_START = 'BALL_START', BALL_CREATE_ADDITIONAL = 'BALL_CREATE_ADDITIONAL', BALL_FIRE_BULLET = 'BALL_FIRE_BULLET', // 敌人控制事件 ENEMY_TAKE_DAMAGE = 'ENEMY_TAKE_DAMAGE', ENEMY_SPAWN_REQUEST = 'ENEMY_SPAWN_REQUEST', ENEMY_GET_NEAREST = 'ENEMY_GET_NEAREST', ENEMY_UPDATE_COUNT = 'ENEMY_UPDATE_COUNT', ENEMY_CHECK_ACTIVE = 'ENEMY_CHECK_ACTIVE', ENEMY_CHECK_GAME_STARTED = 'ENEMY_CHECK_GAME_STARTED', ENEMY_GET_COUNT = 'ENEMY_GET_COUNT', ENEMY_START_WAVE = 'ENEMY_START_WAVE', ENEMY_START_GAME = 'ENEMY_START_GAME', ENEMY_SHOW_START_WAVE_PROMPT = 'ENEMY_SHOW_START_WAVE_PROMPT', // 游戏状态检查事件 GAME_CHECK_OVER = 'GAME_CHECK_OVER', // 方块选择事件 BLOCK_SELECTION_HIDE = 'BLOCK_SELECTION_HIDE', BLOCK_SELECTION_SHOW = 'BLOCK_SELECTION_SHOW', // 子弹事件 BULLET_CREATE_REQUEST = 'BULLET_CREATE_REQUEST', BULLET_HIT_ENEMY = 'BULLET_HIT_ENEMY' } export default class EventBus extends EventTarget { private static _instance: EventBus; private constructor() { super(); } public static getInstance(): EventBus { if (!this._instance) { this._instance = new EventBus(); } return this._instance; } // 重写emit方法,添加黄色字体的日志输出 emit(type: string, ...args: any[]): void { console.log(`%c[EventBus] 发送事件: ${type}`, 'color: #FFD700; font-weight: bold;', args.length > 0 ? args : ''); super.emit(type, ...args); } }