import { EventTarget } from 'cc'; /** * 全局事件总线,用于模块间解耦通信。 */ export enum GameEvents { // 游戏状态事件 GAME_START = 'GAME_START', GAME_PAUSE = 'GAME_PAUSE', GAME_PAUSE_SKILL_SELECTION = 'GAME_PAUSE_SKILL_SELECTION', // 技能选择时暂停(小球完全停止) GAME_PAUSE_BLOCK_SELECTION = 'GAME_PAUSE_BLOCK_SELECTION', // 底板选择时暂停(小球继续运动) GAME_RESUME = 'GAME_RESUME', GAME_RESUME_SKILL_SELECTION = 'GAME_RESUME_SKILL_SELECTION', // 技能选择结束后恢复 GAME_RESUME_BLOCK_SELECTION = 'GAME_RESUME_BLOCK_SELECTION', // 底板选择结束后恢复 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事件 UPGRADE_UPDATED = 'UPGRADE_UPDATED', RETURN_TO_MAIN_MENU = 'RETURN_TO_MAIN_MENU', CURRENCY_CHANGED = 'CURRENCY_CHANGED', UI_PANEL_SWITCHED = 'UI_PANEL_SWITCHED', UPGRADE_UI_OPENED = 'UPGRADE_UI_OPENED', UPGRADE_PANEL_OPENED = 'UPGRADE_PANEL_OPENED', APP_STATE_CHANGED = 'APP_STATE_CHANGED', SHOW_GAIN_UI = 'SHOW_GAIN_UI', GAIN_UI_CONFIRMED = 'GAIN_UI_CONFIRMED', // 新增:奖励动画与武器解锁事件 REWARD_ANIMATION_COMPLETED = 'REWARD_ANIMATION_COMPLETED', NEW_WEAPONS_UNLOCKED = 'NEW_WEAPONS_UNLOCKED', // UI状态切换事件(根据游戏管理文档) ENTER_BATTLE_PREPARATION = 'ENTER_BATTLE_PREPARATION', // 进入备战阶段 ENTER_PLAYING_STATE = 'ENTER_PLAYING_STATE', // 进入游玩状态 ENTER_GAME_END_STATE = 'ENTER_GAME_END_STATE', // 进入游戏结束状态 // 敌人控制事件(保留实际使用的事件) // 墙体事件 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_GET_NEAREST = 'ENEMY_GET_NEAREST', ENEMY_UPDATE_COUNT = 'ENEMY_UPDATE_COUNT', ENEMY_SPAWNING_STARTED = 'ENEMY_SPAWNING_STARTED', ENEMY_SPAWNING_STOPPED = 'ENEMY_SPAWNING_STOPPED', ENEMY_STEALTH_START = 'ENEMY_STEALTH_START', ENEMY_STEALTH_END = 'ENEMY_STEALTH_END', // 伤害事件 APPLY_DAMAGE_TO_ENEMY = 'APPLY_DAMAGE_TO_ENEMY', BURN_EFFECT_ENDED = 'BURN_EFFECT_ENDED', ENEMY_DAMAGE_WALL = 'ENEMY_DAMAGE_WALL', 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', // 方块生成事件 GENERATE_BLOCKS = 'GENERATE_BLOCKS', WAVE_COMPLETED = 'WAVE_COMPLETED', SETUP_BLOCK_DRAG_EVENTS = 'SETUP_BLOCK_DRAG_EVENTS', // 子弹事件 BULLET_CREATE_REQUEST = 'BULLET_CREATE_REQUEST', BULLET_HIT_ENEMY = 'BULLET_HIT_ENEMY', // 方块拖拽事件 BLOCK_DRAG_START = 'BLOCK_DRAG_START', BLOCK_DRAG_END = 'BLOCK_DRAG_END', // 全局强制结束所有拖拽(例如教程自动放置期间) FORCE_END_ALL_DRAGS = 'FORCE_END_ALL_DRAGS', // 方块选择事件 BLOCK_SELECTION_CONFIRMED = 'BLOCK_SELECTION_CONFIRMED', // 教程事件 TUTORIAL_BLOCK_1_PLACED = 'TUTORIAL_BLOCK_1_PLACED', TUTORIAL_BLOCK_2_PLACED = 'TUTORIAL_BLOCK_2_PLACED', TUTORIAL_BLOCK_3_PLACED = 'TUTORIAL_BLOCK_3_PLACED', // 添加:第二次选择的拖拽完成事件 TUTORIAL_BLOCK_4_PLACED = 'TUTORIAL_BLOCK_4_PLACED', TUTORIAL_BLOCK_5_PLACED = 'TUTORIAL_BLOCK_5_PLACED', // Toast提示事件// Toast提示事件 SHOW_TOAST = 'SHOW_TOAST', HIDE_TOAST = 'HIDE_TOAST', SHOW_RESOURCE_TOAST = 'SHOW_RESOURCE_TOAST', HIDE_RESOURCE_TOAST = 'HIDE_RESOURCE_TOAST', // 资源预加载事件 RESOURCE_PRELOAD_START = 'RESOURCE_PRELOAD_START', RESOURCE_PRELOAD_PROGRESS = 'RESOURCE_PRELOAD_PROGRESS', RESOURCE_PRELOAD_COMPLETE = 'RESOURCE_PRELOAD_COMPLETE', RESOURCE_PRELOAD_ERROR = 'RESOURCE_PRELOAD_ERROR' } 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; } }