squidGame/tgx-games-client/assets/start/Start.ts

151 lines
4.8 KiB
TypeScript

import { _decorator, assetManager, Component, director, game, Label, Prefab, Node, profiler } from 'cc';
import { tgxModuleContext, tgxUIMgr } from '../core_tgx/tgx';
import { GameUILayers, GameUILayerNames } from '../scripts/GameUILayers';
import { ModuleDef } from '../scripts/ModuleDef';
import { SceneDef } from '../scripts/SceneDef';
import { PREVIEW } from 'cc/env';
import {areanMgr} from "db://assets/module_arean/scripts/AreanManager";
import {EventName} from "db://assets/core_tgx/easy_ui_framework/EventName";
import {LanguageMgr} from "db://assets/module_basic/manager/LanguageManager";
import {ELanguage} from "db://assets/module_basic/component/Enums";
const { ccclass, property } = _decorator;
// ========== config begin =================
//the first scene after preloading completes.
const _FPS = 61;
const _defaultModule = ModuleDef.BASIC;
// const _firstScene = SceneDef.LOGIN;
const _firstScene = SceneDef.LOBBY;
const _preloadBundles = [ModuleDef.BASIC, ModuleDef.Arean];
const _preloadScenes = [];
const _preloadRes = [
{ bundle: ModuleDef.BASIC, url: 'ui_alert/UI_Alert', type: 'prefab' },
{ bundle: ModuleDef.BASIC, url: 'ui_waiting/UI_Waiting', type: 'prefab' },
// { bundle: ModuleDef.BASIC, url: 'ui_login/ui_login', type: 'prefab' },
];
// ========= config end =====================
// if (_preloadScenes.indexOf(_firstScene) == -1) {
// _preloadScenes.push(_firstScene);
// }
for (let i = 0; i < _preloadScenes.length; ++i) {
let sceneInfo = _preloadScenes[i];
let idx = _preloadBundles.indexOf(sceneInfo.bundle);
if (idx == -1) {
_preloadBundles.push(sceneInfo.bundle);
}
_preloadRes.push({ bundle: sceneInfo.bundle, url: sceneInfo.name, type: 'scene' });
}
const _loadingText = ['Loading.', 'Loading..', 'Loading...'];
const _totalNum = _preloadBundles.length + _preloadRes.length;
@ccclass('Start')
export class Start extends Component {
@property(Label)
txtLoading: Label;
@property(Prefab)
uiCanvasPrefab: Prefab;
@property(Node)
loadingBar: Node;
private _percent: string = '';
private _numCurrentLoaded = 0;
start() {
/**
* @en display stats in preview mode
* @zh 预览调试时,默认显示性能统计面板
*/
if(PREVIEW){
profiler.showStats();
}
tgxModuleContext.setDefaultModule(_defaultModule);
game.frameRate = _FPS;
tgxUIMgr.inst.setup(this.uiCanvasPrefab, GameUILayers.NUM, GameUILayerNames);
this.preloadBundle(0);
this.loadDatatables().then();
}
private loadDatatables() {
return new Promise((resolve, reject) => {
areanMgr.cfgMgr.LoadAll(this.onProgressCallback.bind(this),resolve);
})
}
private onProgressCallback(finished: number, total: number, item: any) {
let progress = finished / total;
// console.log("配置文件加载进度 == ",progress);
}
onResLoaded() {
this._numCurrentLoaded++;
this._percent = ~~(this._numCurrentLoaded / _totalNum * 100) + '%';
}
preloadBundle(idx: number) {
assetManager.loadBundle(_preloadBundles[idx], null, (err, bundle) => {
idx++;
this.onResLoaded();
if (idx < _preloadBundles.length) {
this.preloadBundle(idx);
console.log("加载 bundle: " + _preloadBundles[idx])
}
else {
this.preloadRes(0);
}
});
}
preloadRes(idx: number) {
let res = _preloadRes[idx];
let bundle = assetManager.getBundle(res.bundle);
let onComplete = () => {
idx++;
this.onResLoaded();
if (idx < _preloadRes.length) {
this.preloadRes(idx);
}
else {
this.onPreloadingComplete();
}
}
if (bundle) {
if (res.type == 'prefab') {
bundle.preload(res.url, Prefab, onComplete);
}
else if (res.type == 'scene') {
console.log("res.url === ",res)
bundle.preloadScene(res.url, onComplete);
}
}
}
async onPreloadingComplete() {
director.loadScene(_firstScene.name);
}
update(deltaTime: number) {
if (this._percent) {
let str = LanguageMgr.languageType == ELanguage.CH ? "加载中..." : "Loading...";
this.txtLoading.string = str + this._percent;
}else {
let idx = Math.floor(game.totalTime / 1000) % 3;
this.txtLoading.string = _loadingText[idx];
}
this.loadingBar.setScale(this._numCurrentLoaded / _totalNum, 1, 1);
}
}