import { _decorator, EventTarget } from 'cc'; import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp"; import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; const { ccclass } = _decorator; /** 事件总线组件 - 简化版,仅提供基本的发布订阅功能 */ @ecs.register('EBusComp', false) export class EBusComp extends CCComp { /** 内部事件目标 */ private _eventTarget: EventTarget; /** 获取事件目标 */ private get eventTarget(): EventTarget { if (!this._eventTarget) { this._eventTarget = new EventTarget(); } return this._eventTarget; } start() { // 组件启动时的初始化逻辑 } /** * 发布事件 * @param event 事件名称 * @param data 事件数据 */ public emit(event: string, data?: any): void { this.eventTarget.emit(event, data); } /** * 订阅事件 * @param event 事件名称 * @param callback 回调函数 * @param target 回调函数的this指向 */ public on(event: string, listener: (...args: any[]) => void, object?: any): void { this.eventTarget.on(event, listener, object); } /** * 取消订阅事件 * @param event 事件名称 * @param callback 回调函数 * @param target 回调函数的this指向 */ public off(event?: string, callback?: (data?: any) => void, target?: any): void { if (arguments.length === 0) { // 无参调用:清理本节点所有监听 this.eventTarget.targetOff(this); } else if (arguments.length === 1) { // 仅提供 event:清理该事件名下所有回调 this.eventTarget.targetOff(event); } else { // 完整参数:精确移除指定回调 this.eventTarget.off(event!, callback!, target); } } /** * 订阅一次性事件 * @param event 事件名称 * @param callback 回调函数 * @param target 回调函数的this指向 */ public once(event: string, callback: (data?: any) => void, target?: any): void { this.eventTarget.once(event, callback, target); } /** * 取消所有事件监听 */ public targetOff(target: any): void { this.eventTarget.targetOff(target); } reset() { // 清理所有事件监听 if (this._eventTarget) { this._eventTarget.targetOff(this); } // 组件删除时触发自定义释放逻辑 this.node.destroy(); } }