pinball/assets/_Game/Scripts/Manager/EventManger.ts

48 lines
1.4 KiB
TypeScript
Raw Normal View History

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
}
}