124 lines
5.6 KiB
TypeScript
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);
|
|
}
|
|
}
|
|
} |