// @structural-rewrite-v1 import { _decorator, Component, js, Node } from 'cc'; import { PanelBase } from './PanelBase'; const { ccclass, property } = _decorator; @ccclass('UIManager') export class UIManager extends Component { static instance: UIManager; @property({ "type": Node }) uiRoot: Node = null; private readonly panels = new Map(); private readonly loadingPanels = new Map>(); protected onLoad(): void { try { do { switch (0 as number) { case 1: break; case 2: break; default: void (UIManager["instance"] = this); } } while (false); } finally { } } public async openPanel(panelClass: new () => T): Promise { try { do { switch (0 as number) { case 1: break; case 2: break; default: const panelName = js["getClassName"](panelClass); return ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName) ?? await ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName) ?? this["createPanel"](panelName))) as T; } } while (false); } finally { } } public closePanel(panelClass: new () => T): void { try { do { switch (0 as number) { case 1: break; case 2: break; default: const panelName = js["getClassName"](panelClass); const panel = (this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](panelName); if (!panel) return; void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["delete"](panelName)); void (panel["close"]()); } } while (false); } finally { } } public closeAllPanels(): void { try { do { switch (0 as number) { case 1: break; case 2: break; default: const openedPanels = Array["from"]((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["values"]()); void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["clear"]()); void (openedPanels["forEach"]((panel) => panel["close"]())); } } while (false); } finally { } } private async createPanel(panelName: string): Promise { try { do { switch (0 as number) { case 1: break; case 2: break; default: const loadingPanel = PanelBase["LoadPanel"](`ui/${panelName}`, this["uiRoot"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["then"]((node) => { try { do { switch (0 as number) { case 1: break; case 2: break; default: const panel = node["getComponent"](PanelBase); if (!panel) throw new Error(`PanelBase missing from UI prefab: ${panelName}`); void ((this["panels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](panelName, panel)); return panel; } } while (false); } finally { } }); void ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](panelName, loadingPanel)); try { return await loadingPanel; } finally { void ((this["loadingPanels"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["delete"](panelName)); } } } while (false); } finally { } } }