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

34 lines
1.1 KiB
TypeScript

import { __private, _decorator, EventTarget } from 'cc';
import { GameEventArgMap, GameEventCallbackMap } from '../Events/GameEvent';
import Singleton from '../Singleton';
const { ccclass, property } = _decorator;
@ccclass('EventManger')
export class EventManger extends Singleton<EventManger>('EventManger') {
private _eventTarget = new EventTarget();
public on<K extends keyof GameEventCallbackMap>(
eventType: K,
callback: GameEventCallbackMap[K],
target?: any,
): GameEventCallbackMap[K] {
return this._eventTarget.on(eventType, callback, target);
}
public off<K extends keyof GameEventCallbackMap>(
eventType: K,
callback: GameEventCallbackMap[K],
thisArg?: any,
): GameEventCallbackMap[K] {
return this._eventTarget.on(eventType, callback, thisArg);
}
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);
}
}
}