/* * @Author: dgflash * @Date: 2021-07-03 16:13:17 * @LastEditors: dgflash * @LastEditTime: 2023-08-28 10:02:57 */ import { Component, Game, JsonAsset, Node, _decorator, director, game, screen, sys } from "cc"; import { LanguageManager } from "../libs/gui/language/Language"; import { GameConfig } from "../module/config/GameConfig"; import { GameQueryConfig } from "../module/config/GameQueryConfig"; import { oops, version } from "./Oops"; import { AudioManager } from "./common/audio/AudioManager"; import { EventMessage } from "./common/event/EventMessage"; import { TimerManager } from "./common/timer/TimerManager"; import { GameManager } from "./game/GameManager"; import { GUI } from "./gui/GUI"; import { LayerManager } from "./gui/layer/LayerManager"; const { ccclass, property } = _decorator; var isInited = false; /** 框架显示层根节点 */ export class Root extends Component { /** 游戏层节点 */ @property({ type: Node, tooltip: "游戏层" }) game: Node = null!; /** 界面层节点 */ @property({ type: Node, tooltip: "界面层" }) gui: Node = null!; /** 持久根节点 */ persistRootNode: Node = null! onLoad() { if (!isInited) { isInited = true; // 注:这里是规避cc3.8在编辑器模式下运行时,关闭游戏会两次初始化报错 console.log(`Oops Framework v${version}`); this.enabled = false; let config_name = "config"; oops.res.load(config_name, JsonAsset, () => { var config = oops.res.get(config_name); // oops.config.btc = new BuildTimeConstants(); oops.config.query = new GameQueryConfig(); oops.config.game = new GameConfig(config); oops.http.server = oops.config.game.httpServer; // Http 服务器地址 oops.http.timeout = oops.config.game.httpTimeout; // Http 请求超时时间 oops.storage.init(oops.config.game.localDataKey, oops.config.game.localDataIv); // 初始化本地存储加密 game.frameRate = oops.config.game.frameRate; // 初始化每秒传输帧数 this.enabled = true; this.init(); this.run(); }); } } update(dt: number) { oops.ecs.execute(dt); } /** 初始化游戏界面 */ protected initGui() { } /** 初始化游戏业务模块 */ protected initEcsSystem() { } /** 加载完引擎配置文件后执行 */ protected run() { } protected init() { // 创建持久根节点 this.persistRootNode = new Node("PersistRootNode"); director.addPersistRootNode(this.persistRootNode); // 创建音频模块 oops.audio = this.persistRootNode.addComponent(AudioManager); oops.audio.load(); // 创建时间模块 oops.timer = this.persistRootNode.addComponent(TimerManager)!; oops.language = new LanguageManager(); oops.game = new GameManager(this.game); oops.gui = new LayerManager(this.gui); this.initGui(); this.initEcsSystem(); oops.ecs.init(); // 游戏显示事件 game.on(Game.EVENT_SHOW, () => { oops.timer.load(); // 平台不需要在退出时精准计算时间,直接暂时游戏时间 oops.audio.resumeAll(); director.resume(); game.resume(); oops.message.dispatchEvent(EventMessage.GAME_ENTER); }); // 游戏隐藏事件 game.on(Game.EVENT_HIDE, () => { oops.timer.save(); // 平台不需要在退出时精准计算时间,直接暂时游戏时间 oops.audio.pauseAll(); director.pause(); game.pause(); oops.message.dispatchEvent(EventMessage.GAME_EXIT); }); // 游戏尺寸修改事件 var c_gui = this.gui.addComponent(GUI)!; if (sys.isMobile == false) { screen.on("window-resize", () => { c_gui.resize(); oops.message.dispatchEvent(EventMessage.GAME_RESIZE); }, this); screen.on("fullscreen-change", () => { oops.message.dispatchEvent(EventMessage.GAME_FULL_SCREEN); }, this); } screen.on("orientation-change", () => { oops.message.dispatchEvent(EventMessage.GAME_ORIENTATION); }, this); } }