import { _decorator, Component, director, Director, Node } from 'cc'; import { AppKernel } from '../../app/AppKernel'; import { UILayer } from '../../framework/ui/UILayer'; const { ccclass, property } = _decorator; @ccclass('LobbyController') export class LobbyController extends Component { @property(Node) pageLayer: Node | null = null; @property(Node) windowLayer: Node | null = null; @property(Node) popupLayer: Node | null = null; @property(Node) toastLayer: Node | null = null; @property(Node) loadingLayer: Node | null = null; @property(Node) systemLayer: Node | null = null; protected async start(): Promise { this.bindLayers(); await AppKernel.ui.registerSceneViews(); await AppKernel.appLobby.launchLobby(); await this.waitForNextDraw(); AppKernel.events.emit('launch:completed'); } private waitForNextDraw(): Promise { return new Promise((resolve) => { director.once(Director.EVENT_AFTER_DRAW, resolve); }); } protected onDestroy(): void { AppKernel.events.offTarget(this); AppKernel.ui.clearSceneLayers(); } private bindLayers(): void { const bindings: Array<[UILayer, Node | null]> = [ [UILayer.Page, this.pageLayer], [UILayer.Window, this.windowLayer], [UILayer.Popup, this.popupLayer], [UILayer.Toast, this.toastLayer], [UILayer.Loading, this.loadingLayer], [UILayer.System, this.systemLayer], ]; for (const [layer, node] of bindings) { if (node) AppKernel.ui.bindLayer(layer, node); } } }