LobbyController.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. const lobbyService = AppKernel.services.lobbyService;
  17. await lobbyService.launchLobby();
  18. await this.waitForNextDraw();
  19. AppKernel.events.emit('launch:completed');
  20. }
  21. private waitForNextDraw(): Promise<void> {
  22. return new Promise((resolve) => {
  23. director.once(Director.EVENT_AFTER_DRAW, resolve);
  24. });
  25. }
  26. protected onDestroy(): void {
  27. AppKernel.events.offTarget(this);
  28. AppKernel.ui.clearSceneLayers();
  29. }
  30. private bindLayers(): void {
  31. const bindings: Array<[UILayer, Node | null]> = [
  32. [UILayer.Page, this.pageLayer],
  33. [UILayer.Window, this.windowLayer],
  34. [UILayer.Popup, this.popupLayer],
  35. [UILayer.Toast, this.toastLayer],
  36. [UILayer.Loading, this.loadingLayer],
  37. [UILayer.System, this.systemLayer],
  38. ];
  39. for (const [layer, node] of bindings) {
  40. if (node) AppKernel.ui.bindLayer(layer, node);
  41. }
  42. }
  43. }