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( eventType: K, callback: GameEventCallbackMap[K], target?: any, ): GameEventCallbackMap[K] { return this._eventTarget.on(eventType, callback, target); } public off( eventType: K, callback: GameEventCallbackMap[K], thisArg?: any, ): GameEventCallbackMap[K] { return this._eventTarget.on(eventType, callback, thisArg); } public emit(eventType: K, arg: GameEventArgMap[K]) { if (Array.isArray(arg)) { this._eventTarget.emit(eventType, ...arg); } else { this._eventTarget.emit(eventType, arg); } } }