From 7a061b10d58d6cd5d3756cba6936f98b7697f02f Mon Sep 17 00:00:00 2001 From: DarkWiiPlayer Date: Mon, 13 Sep 2021 18:54:32 +0200 Subject: [PATCH] Add speaker class, completing the black hand --- speaker.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 speaker.js diff --git a/speaker.js b/speaker.js new file mode 100644 index 0000000..b8102a7 --- /dev/null +++ b/speaker.js @@ -0,0 +1,37 @@ +class Speaker { + #callbacks = new Set() + #immediate + #scheduled = [] + + constructor(immediate) { + this.#immediate = immediate + } + + listen(callback) { + this.#callbacks.add(callback) + } + + speak(...args) { + if (this.#immediate) { + for (let callback of this.#callbacks) { + callback(...args) + } + } else { + if (!this.#scheduled.length) { + queueMicrotask(() => { + for (let callback of this.#callbacks) { + callback(...args) + } + this.#scheduled = [] + }) + } + this.#scheduled.push(args) + } + } + + silence(callback) { + this.#callbacks.delete(callbacks) + } +} + +export default Speaker