squidGame/tgx-games-client/assets/module_arean/ui_season/UISeason.ts

124 lines
5.6 KiB
TypeScript

/************************************************************************************
* FileName : UISeason.ts
* Description :
* Version : v1.0.0
* CreateTime : 2024-12-30 17:02:47
* Author :
* Copyright (c) 2024
* ==============================================================
* Method Description:
*
* ==============================================================
************************************************************************************/
import {GameUILayers} from "db://assets/scripts/GameUILayers";
import {tgx_class} from "db://assets/core_tgx/base/ModuleContext";
import {ModuleDef} from "db://assets/scripts/ModuleDef";
import {tgxAudioMgr, tgxUIController, tgxUIMgr} from "db://assets/core_tgx/tgx";
import {Layout_UISeason} from "db://assets/module_arean/ui_season/Layout_UISeason";
import {EMusicDefine} from "db://assets/module_basic/scripts/MusicDefine";
import {UserMgr} from "db://assets/module_basic/scripts/UserMgr";
import {CommonFun} from "db://assets/module_arean/scripts/CommonFun";
import {areanMgr} from "db://assets/module_arean/scripts/AreanManager";
import {resLoader} from "db://assets/core_tgx/base/utils/ResLoader";
import {instantiate, SpriteFrame, Node, Prefab, v3, sp, Label } from "cc";
import {UIDan} from "db://assets/module_arean/ui_dan/UIDan";
import {NetGameServer} from "db://assets/module_basic/scripts/NetGameServer";
@tgx_class(ModuleDef.Arean)
export class UISeason extends tgxUIController{
constructor() {
super("ui_season/ui_season", GameUILayers.POPUP,Layout_UISeason)
}
protected async onCreated(params: any) {
let layout: Layout_UISeason = this.layout as Layout_UISeason;
console.log("当前的赛季信息 === ", UserMgr.inst.userInfo.seasonInfo);
// 关闭界面
this.onButtonEvent(layout.closeBtn, () => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLOSE);
this.close();
})
// 段位界面
this.onButtonEvent(layout.danBtn, () => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_OPEN);
tgxUIMgr.inst.showUI(UIDan);
})
await this._initTotalData();
this._initList();
}
/** 顶部数据 */
private async _initTotalData(): Promise<void> {
let layout: Layout_UISeason = this.layout as Layout_UISeason;
let seasonData = await NetGameServer.inst.callApi("arean/season/AreanSeasonInfo", {});
console.log("获取到的赛季信息 == ",seasonData);
UserMgr.inst.userInfo.seasonInfo = seasonData.res.data;
let seasonInfo = UserMgr.inst.userInfo.seasonInfo;
layout.seasonName.string = `S${seasonInfo.season} 赛季主题`;
layout.totalCount.string = `${seasonInfo.totalGames}`;
layout.winCount.string = `${seasonInfo.wins}`;
layout.topFourCount.string = `${seasonInfo.topFour}`;
let curDanInfo = CommonFun.getInstance().calDanData(UserMgr.inst.userInfo.danGrading);
let data = areanMgr.cfgMgr.DanData.getData(curDanInfo.curDan);
layout.danName.string = `${data.danName}`;
let sp: SpriteFrame = resLoader.getSpriteFrame('res/danIcon/dan_' + data.mainDan, ModuleDef.Arean);
if (sp) layout.danIcon.spriteFrame = sp;
}
/** 列表数据 */
private _initList() : void{
let layout : Layout_UISeason = this.layout as Layout_UISeason;
let heroList = UserMgr.inst.userInfo.seasonInfo.heroStats;
let len = heroList.length;
for(let i = 0; i < len; i++){
let item = instantiate(layout.cell);
item.active = true;
this._initCell(item,heroList[i]);
item.parent = layout.content;
}
}
private _initCell(node : Node,data) : void{
let localHeroData = areanMgr.cfgMgr.HeroDatas.getAllDataMap();
let curHeroData = localHeroData.get(data.heroId);
if(curHeroData){
let skin = curHeroData.skinRes[0];
let skinId = areanMgr.cfgMgr.SkinData.getData(skin).icon
resLoader.load<Prefab>(ModuleDef.Arean,`res/Prefebs/heroSpine/${skinId}`,(err: Error, prefab: Prefab) => {
if(err){
console.error(err);
return;
}else {
let spineNode = instantiate(prefab);
node.getChildByName("icon").destroyAllChildren();
node.getChildByName("icon").addChild(spineNode);
spineNode.scale = v3(0.8,0.8,1);
spineNode.position = v3(0,-60,0);
// spineNode.getComponent(sp.Skeleton).animation = null;
}
})
node.getChildByName("heroName").getComponent(Label).string = curHeroData.name;
}else {
console.error(`${UserMgr.inst.userInfo.heroId}英雄数据不存在`);
}
let dataNode = node.getChildByName("dataNode");
dataNode.getChildByName("lab_1").getComponent(Label).string = data.gamesPlayed + "场";
let value = Math.trunc(this.divideAndFormat(data.wins,data.gamesPlayed) * 100);
dataNode.getChildByName("lab_2").getComponent(Label).string = "夺冠率:" + value + "%";
value = Math.trunc(this.divideAndFormat(data.topFour,data.gamesPlayed) * 100);
dataNode.getChildByName("lab_3").getComponent(Label).string = "前四率:" + value + "%";
}
private divideAndFormat(dividend: number, divisor: number): number {
const result = dividend / divisor;
if (result % 1 !== 0) {
return parseFloat((Math.round(result * 100) / 100).toFixed(2));
} else {
return Math.trunc(result);
}
}
}