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

48 lines
1.4 KiB
TypeScript

import { __private, _decorator, Component, EventTarget, Node } from 'cc';
import { GameEventArgMap, GameEventCallbackMap } from '../Events/GameEvent';
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;
}
}
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);
}
}
}