LobbyController.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { _decorator, Component, director, Director, Input, input, KeyCode, 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 onLoad(): void {
  14. input.on(Input.EventType.KEY_DOWN, (event) => {
  15. if (event.keyCode === KeyCode.KEY_W) {
  16. this.node.parent.active = !this.node.parent.active;
  17. }
  18. })
  19. }
  20. protected async start(): Promise<void> {
  21. this.bindLayers();
  22. await AppKernel.ui.registerSceneViews();
  23. await AppKernel.appLobby.launchLobby();
  24. await this.waitForNextDraw();
  25. AppKernel.events.emit('launch:completed');
  26. }
  27. private waitForNextDraw(): Promise<void> {
  28. return new Promise((resolve) => {
  29. director.once(Director.EVENT_AFTER_DRAW, resolve);
  30. });
  31. }
  32. protected onDestroy(): void {
  33. AppKernel.events.offTarget(this);
  34. AppKernel.ui.clearSceneLayers();
  35. }
  36. private bindLayers(): void {
  37. const bindings: Array<[UILayer, Node | null]> = [
  38. [UILayer.Page, this.pageLayer],
  39. [UILayer.Window, this.windowLayer],
  40. [UILayer.Popup, this.popupLayer],
  41. [UILayer.Toast, this.toastLayer],
  42. [UILayer.Loading, this.loadingLayer],
  43. [UILayer.System, this.systemLayer],
  44. ];
  45. for (const [layer, node] of bindings) {
  46. if (node) AppKernel.ui.bindLayer(layer, node);
  47. }
  48. }
  49. }