import fetchLibraries from "./fetchLibraries.js"; export default class Renderer { static libraries = fetchLibraries(); #type; #canvas; #ready; #width = 300; #height = 150; #fullscreen = false; #cache = new Map(); #destroyed = false; constructor(type, ready) { this.#type = type; this.#canvas = document.createElement("canvas"); this.#ready = Renderer.libraries.then(libraries => { this.#cache = new Map(libraries.staticAssets); }).then(ready); } get canvas() { return this.#canvas; } get cache() { return this.#cache; } get type () { return this.#type; } get ready () { return this.#ready; } get size() { return [this.#width, this.#height]; } set size([width, height]) { [width, height] = [Math.ceil(width), Math.ceil(height)]; if (width === this.#width && height === this.#height) { return; } [this.#canvas.width, this.#canvas.height] = [this.#width, this.#height] = [width, height]; } get fullscreen() { return this.#fullscreen; } set fullscreen(value) { if (!!value === this.#fullscreen) { return; } if (!document.fullscreenEnabled && !document.webkitFullscreenEnabled) { return; } this.#fullscreen = value; if (document.fullscreenElement != null) { document.exitFullscreen(); } if (this.#fullscreen) { if (this.#canvas.webkitRequestFullscreen != null) { this.#canvas.webkitRequestFullscreen(); } else { this.#canvas.requestFullscreen(); } } } async formulate(config) { await this.ready; if (this.destroyed) { throw new Error("Cannot formulate a destroyed rain instance."); } } get destroyed() { return this.#destroyed; } destroy() { this.#destroyed = true; this.#cache.clear(); } }