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

34 lines
1.1 KiB
TypeScript
Raw Normal View History

2024-03-28 20:35:44 -07:00
import { __private, _decorator, EventTarget } from 'cc';
2024-03-07 03:15:08 -08:00
import { GameEventArgMap, GameEventCallbackMap } from '../Events/GameEvent';
2024-03-28 20:35:44 -07:00
import Singleton from '../Singleton';
2024-03-06 01:28:01 -08:00
const { ccclass, property } = _decorator;
@ccclass('EventManger')
2024-03-28 20:35:44 -07:00
export class EventManger extends Singleton<EventManger>('EventManger') {
2024-03-06 01:28:01 -08:00
private _eventTarget = new EventTarget();
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
}
}