UNPKG

@tendrock/lib

Version:

A lib under the Tendrock system for Minecraft Bedrock Script API

43 lines (42 loc) 1.53 kB
import { EventSignal } from "./EventSignal"; import { SetMap } from "@tenolib/map"; export class EventBus { constructor() { this._eventSignalMap = new Map(); this.callbackSetMap = new SetMap(); } registerSignal(eventType) { const eventSignal = new EventSignal(this, eventType); this._eventSignalMap.set(eventType, eventSignal); return eventSignal; } subscribe(eventType, callback) { const eventSignal = this._getEventSignal(eventType); this.callbackSetMap.addValue(eventSignal, callback); } unsubscribe(eventType, callback) { const eventSignal = this._getEventSignal(eventType); this.callbackSetMap.deleteValue(eventSignal, callback); } _getEventSignal(eventTypeOrSignal) { if (typeof eventTypeOrSignal !== "string") { return eventTypeOrSignal; } const eventSignal = this._eventSignalMap.get(eventTypeOrSignal); if (!eventSignal) { throw new Error(`Event type ${eventTypeOrSignal} not registered`); } return eventSignal; } trigger(eventTypeOrSignal, eventData) { var _a; const eventSignal = this._getEventSignal(eventTypeOrSignal); if (!eventSignal) return; (_a = this.callbackSetMap.get(eventSignal)) === null || _a === void 0 ? void 0 : _a.forEach((callback) => { callback(eventData); }); } } EventBus.Instance = new EventBus(); export const eventBus = EventBus.Instance;