mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-18 13:43:27 +00:00
* Tgui: Events & Colors in typescript (#83218) ## About The Pull Request Made more common tgui bits in typescript with tests. Not much else to see here ## Why It's Good For The Game Typescript conversion + More documentation + type safety You now get full docs and type info as nature intended:  --------- Co-authored-by: Style Mistake <stylemistake@ gmail.com> * Tgui: Events & Colors in typescript --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Style Mistake <stylemistake@ gmail.com>
46 lines
989 B
TypeScript
46 lines
989 B
TypeScript
/**
|
|
* @file
|
|
* @copyright 2020 Aleksej Komarov
|
|
* @license MIT
|
|
*/
|
|
|
|
type Fn = (...args: any[]) => void;
|
|
|
|
export class EventEmitter {
|
|
private listeners: Record<string, Fn[]>;
|
|
|
|
constructor() {
|
|
this.listeners = {};
|
|
}
|
|
|
|
on(name: string, listener: Fn): void {
|
|
this.listeners[name] = this.listeners[name] || [];
|
|
this.listeners[name].push(listener);
|
|
}
|
|
|
|
off(name: string, listener: Fn): void {
|
|
const listeners = this.listeners[name];
|
|
if (!listeners) {
|
|
throw new Error(`There is no listeners for "${name}"`);
|
|
}
|
|
this.listeners[name] = listeners.filter((existingListener) => {
|
|
return existingListener !== listener;
|
|
});
|
|
}
|
|
|
|
emit(name: string, ...params: any[]): void {
|
|
const listeners = this.listeners[name];
|
|
if (!listeners) {
|
|
return;
|
|
}
|
|
for (let i = 0, len = listeners.length; i < len; i += 1) {
|
|
const listener = listeners[i];
|
|
listener(...params);
|
|
}
|
|
}
|
|
|
|
clear(): void {
|
|
this.listeners = {};
|
|
}
|
|
}
|