90 lines
2.6 KiB
TypeScript
90 lines
2.6 KiB
TypeScript
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();
|
||
}
|
||
} |