2024-03-06 10:08:30 -08:00
|
|
|
import { __private, _decorator, Component, EventTarget, Node } from 'cc';
|
2024-03-07 03:15:08 -08:00
|
|
|
import { GameEventArgMap, GameEventCallbackMap } from '../Events/GameEvent';
|
2024-03-06 01:28:01 -08:00
|
|
|
const { ccclass, property } = _decorator;
|
|
|
|
|
|
|
|
@ccclass('EventManger')
|
|
|
|
export class EventManger extends Component {
|
|
|
|
//singleton
|
|
|
|
private static _instance: EventManger = null;
|
|
|
|
public static get instance(): EventManger {
|
|
|
|
if (!EventManger._instance) {
|
|
|
|
EventManger._instance = new EventManger('EventManger');
|
|
|
|
}
|
|
|
|
return EventManger._instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
private _eventTarget = new EventTarget();
|
|
|
|
|
|
|
|
onLoad() {
|
|
|
|
if (!EventManger._instance) {
|
|
|
|
EventManger._instance = this;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-03-06 10:08:30 -08:00
|
|
|
public on<K extends keyof GameEventCallbackMap>(
|
|
|
|
eventType: K,
|
|
|
|
callback: GameEventCallbackMap[K],
|
|
|
|
target?: any,
|
|
|
|
): GameEventCallbackMap[K] {
|
|
|
|
return this._eventTarget.on(eventType, callback, target);
|
2024-03-06 01:28:01 -08:00
|
|
|
}
|
|
|
|
|
2024-03-06 10:08:30 -08:00
|
|
|
public off<K extends keyof GameEventCallbackMap>(
|
|
|
|
eventType: K,
|
|
|
|
callback: GameEventCallbackMap[K],
|
|
|
|
thisArg?: any,
|
|
|
|
): GameEventCallbackMap[K] {
|
|
|
|
return this._eventTarget.on(eventType, callback, thisArg);
|
2024-03-06 01:28:01 -08:00
|
|
|
}
|
|
|
|
|
2024-03-06 10:08:30 -08:00
|
|
|
public emit<K extends keyof GameEventArgMap>(eventType: K, arg: GameEventArgMap[K]) {
|
|
|
|
if (Array.isArray(arg)) {
|
|
|
|
this._eventTarget.emit(eventType, ...arg);
|
|
|
|
} else {
|
|
|
|
this._eventTarget.emit(eventType, arg);
|
|
|
|
}
|
2024-03-06 01:28:01 -08:00
|
|
|
}
|
|
|
|
}
|