roleplayer
Version:
A library for building table top role playing game worlds, and managing campaigns in those worlds
21 lines (16 loc) • 446 B
text/typescript
type Func<TEvent = unknown> = (event: TEvent) => void;
export default class Observable<TEvent = unknown> {
private observers = new Set<Func<TEvent>>();
subscribe(func: Func<TEvent>) {
this.observers.add(func);
return () => this.unsubscribe(func);
}
unsubscribe(func: Func<TEvent>) {
this.observers.delete(func);
}
notify(event: TEvent) {
for (const observer of this.observers) {
observer(event);
}
}
}