LobbyController.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { _decorator, Component, director, Director, Node } from 'cc';
  2. import { AppKernel } from '../../app/AppKernel';
  3. import { UILayer } from '../../framework/ui/UILayer';
  4. const { ccclass, property } = _decorator;
  5. @ccclass('LobbyController')
  6. export class LobbyController extends Component {
  7. @property(Node) pageLayer: Node | null = null;
  8. @property(Node) windowLayer: Node | null = null;
  9. @property(Node) popupLayer: Node | null = null;
  10. @property(Node) toastLayer: Node | null = null;
  11. @property(Node) loadingLayer: Node | null = null;
  12. @property(Node) systemLayer: Node | null = null;
  13. protected async start(): Promise<void> {
  14. this.bindLayers();
  15. await AppKernel.ui.registerSceneViews();
  16. await AppKernel.appLobby.launchLobby();
  17. await this.waitForNextDraw();
  18. AppKernel.events.emit('launch:completed');
  19. }
  20. private waitForNextDraw(): Promise<void> {
  21. return new Promise((resolve) => {
  22. director.once(Director.EVENT_AFTER_DRAW, resolve);
  23. });
  24. }
  25. protected onDestroy(): void {
  26. AppKernel.events.offTarget(this);
  27. AppKernel.ui.clearSceneLayers();
  28. }
  29. private bindLayers(): void {
  30. const bindings: Array<[UILayer, Node | null]> = [
  31. [UILayer.Page, this.pageLayer],
  32. [UILayer.Window, this.windowLayer],
  33. [UILayer.Popup, this.popupLayer],
  34. [UILayer.Toast, this.toastLayer],
  35. [UILayer.Loading, this.loadingLayer],
  36. [UILayer.System, this.systemLayer],
  37. ];
  38. for (const [layer, node] of bindings) {
  39. if (node) AppKernel.ui.bindLayer(layer, node);
  40. }
  41. }
  42. }