GameController.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { _decorator, Camera, Component, Node, RenderTexture, screen, Sprite, SpriteFrame, WebView } from 'cc';
  2. import { AppKernel } from '../../app/AppKernel';
  3. import AppConfig from '@scripts/app/AppConfig';
  4. import { IWebEventHandler, IWebViewMsg, WebViewHandler } from './WebViewHandler';
  5. import LZString from 'lz-string';
  6. import { waitForSeconds } from '@scripts/utils/Helper';
  7. const { ccclass, property } = _decorator;
  8. const GAME_FRAME = "http://192.168.1.13:3000";
  9. @ccclass('GameController')
  10. export class GameController extends Component implements IWebEventHandler {
  11. @property(WebView)
  12. webView: WebView | null = null;
  13. @property(Node)
  14. loadingNode: Node | null = null;
  15. private _gameWeb: WebViewHandler | null = null;
  16. protected start(): void {
  17. if (!this.webView) {
  18. console.error('[GameController] WebView is not assigned.');
  19. return;
  20. }
  21. const gameStore = AppKernel.stores.gameStore;
  22. const gameUrl = `${GAME_FRAME}?game=${LZString.compressToBase64(gameStore.gameLink)}`;
  23. this._gameWeb = new WebViewHandler(
  24. this.webView,
  25. gameUrl,
  26. this,
  27. AppConfig.GameScheme
  28. )
  29. // this.webView.node.setPosition(10000, 10000, 0);
  30. AppKernel.services.gameService.onEntered();
  31. }
  32. protected onDestroy(): void {
  33. this._gameWeb?.clear();
  34. this._gameWeb = null;
  35. AppKernel.services.gameService.onExited();
  36. }
  37. onHandleMsg(data: IWebViewMsg) {
  38. switch (data.cmd) {
  39. // case "game_ready":
  40. // const game_url = AppKernel.stores.gameStore.gameLink;
  41. // if (!this._gameWeb) {
  42. // console.warn('[GameController] Ignored game_ready after WebView disposal.');
  43. // return;
  44. // }
  45. // this._gameWeb.sendMessage({ cmd: "update_gamelink", url: game_url })
  46. // break;
  47. case "game_exit":
  48. this.exitGame();
  49. break;
  50. }
  51. }
  52. async exitGame(): Promise<void> {
  53. await AppKernel.services.gameService.exitGame();
  54. }
  55. showWebView() {
  56. this.webView.node.setPosition(0, 0, 0);
  57. }
  58. }