角色视图 数据逻辑 依ecs 框架进行重构

This commit is contained in:
walkpan
2025-10-30 08:56:37 +08:00
parent edb7f23918
commit a79cb9f35d
10 changed files with 1274 additions and 602 deletions

View File

@@ -0,0 +1,90 @@
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();
}
}