squidGame/tgx-games-client/assets/module_arean/ui_collection/UICollection.ts

736 lines
30 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************************
* FileName : UICollection.ts
* Description :
* Version : v1.0.0
* CreateTime : 2024-10-21 16:36:05
* Author :
* Copyright (c) since 2024
* ==============================================================
* Method Description:
*
* ==============================================================
************************************************************************************/
import {director, instantiate, Label, Node, Prefab, sp, Sprite, SpriteFrame, Toggle, v3} from 'cc';
import {tgx_class, tgxAudioMgr, tgxUIAlert, tgxUIController, tgxUIMgr, tgxUITipsBar} from "db://assets/core_tgx/tgx";
import {ModuleDef} from "db://assets/scripts/ModuleDef";
import {GameUILayers} from "db://assets/scripts/GameUILayers";
import {areanMgr} from "db://assets/module_arean/scripts/AreanManager";
import {IHeroCfg} from "db://assets/module_basic/shared/configs/interface/IHeroCfg";
import {ISkinCfg} from "db://assets/module_basic/shared/configs/interface/ISkinCfg";
import {
EAreanBuyType,
EHeroType,
ESkinQuality,
IServerHeroData
} from "db://assets/module_basic/shared/protocols/public/arean/AreanTypeDef";
import {UserMgr} from "db://assets/module_basic/scripts/UserMgr";
import {resLoader} from "db://assets/core_tgx/base/utils/ResLoader";
import {Layout_UICollection} from "db://assets/module_arean/ui_collection/Layout_UICollection";
import {HeroItem} from "db://assets/module_arean/ui_collection/HeroItem";
import {UserInfo} from "db://assets/module_basic/shared/types/UserInfo";
import {UIHeroStory} from "db://assets/module_arean/ui_hero_story/UIHeroStory";
import {UIGetHero} from "db://assets/module_arean/ui_getHero/UIGetHero";
import {RoomEvent} from '../../module_basic/scripts/GameMgr';
import {EMusicDefine} from '../../module_basic/scripts/MusicDefine';
import {IPropCfg} from "db://assets/module_basic/shared/configs/interface/IPropCfg";
import {CommonFun} from "db://assets/module_arean/scripts/CommonFun";
const enum ETAG_NAME {
Hero = 1,
Skin = 2,
}
// 英雄筛选条件
const enum EHeroCondition {
Date = 1, // 日期
Letter = 2, // 字母
Degree = 3, // 熟练度
Score = 4, // 英雄评分
}
// 英雄筛选条件
const enum ESkinCondition {
Date = 1, // 日期
Quality = 2, // 品质
Series = 3, // 系列
Hero = 4, // 英雄
}
// 英雄筛选条件(展示)
const HeroConditionName = {
[1] : "获取日期",
[2] : "按字母顺序",
[3] : "熟练度",
[4] : "英雄评分",
}
// 皮肤筛选条件(展示)
const SkinConditionName = {
[1] : "获取日期",
[2] : "品质",
[3] : "系列",
[4] : "英雄",
}
@tgx_class(ModuleDef.Arean)
export class UICollection extends tgxUIController {
// 当前选择的标签页面
private _curTagName : ETAG_NAME = null;
// 当前选择的英雄类型
private _curChooseHeroType : EHeroType = EHeroType.None;
// 当前选择的皮肤类型
private _curChooseSkinQuality : ESkinQuality = ESkinQuality.None;
// 筛选条件节点
private _ConditionHeroNodes: Map<EHeroType, Node> = new Map<EHeroType, Node>();
private _ConditionSkinNodes: Map<ESkinQuality, Node> = new Map<ESkinQuality, Node>();
// 英雄筛选条件
private _queryHeroCondition: EHeroCondition = EHeroCondition.Date;
// 皮肤筛选条件
private _querySkinCondition: ESkinCondition = ESkinCondition.Date;
// 当前选择的英雄ID
private _curChooseHeroID: number = null;
// 自定义查找的英雄
private _inputCustomHeroName: string = "";
// 自定义查找的皮肤
private _inputCustomSkinName: string = "";
private _userInfo : UserInfo = null;
// 命运当前选择是介绍还是详情1介绍2详情
private _mingYunChooseTag : number = 1;
// 大招当前选择是介绍还是详情1介绍2详情
private _bigSkillChooseTag : number = 1;
constructor() {
super("ui_collection/ui_collection", GameUILayers.POPUP, Layout_UICollection);
}
protected async onCreated(): Promise<void> {
let userInfo = await UserMgr.inst.rpc_GetUserInfo(UserMgr.inst.userId);
this._userInfo = userInfo;
this._curChooseHeroID = userInfo.heroId || 1001;
let layout: Layout_UICollection = this.layout as Layout_UICollection;
// 关闭界面
this.onButtonEvent(layout.btnClose, () => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLOSE);
this.close();
})
this.onButtonEvent(layout.btnBuy, () => {
this._buyHero(EAreanBuyType.Coin);
})
this.onButtonEvent(layout.btnBuy2, () => {
this._buyHero(EAreanBuyType.Diamond);
})
this.onButtonEvent(layout.showSkinNodeBtn, () => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
this._showSkinNode();
})
this.onButtonEvent(layout.btnDetail, () => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_OPEN);
this._openDetail();
})
this.onButtonEvent(layout.mingYunBtn, () => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
this._mingYunChooseTag = this._mingYunChooseTag == 1 ? 2 : 1;
this._changeMingYunToggleChecked();
})
this.onButtonEvent(layout.bigSkillBtn, () => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
this._bigSkillChooseTag = this._bigSkillChooseTag == 1 ? 2 : 1;
this._changeBigSkillToggleChecked();
})
for (let i: number = 0; i < 5; i++) {
let toggle: Toggle = layout.heroToggleGroup.getChildByName(`Toggle${i + 1}`).getComponent(Toggle);
let attr: { tag: EHeroType } = {
tag: i
}
toggle.node.attr(attr);
this._ConditionHeroNodes.set(i, toggle.node);
toggle.node.on('toggle', (target: Toggle) => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
//@ts-ignore
this._changeHeroToggleChecked(target.node.tag);
}, this);
}
// for (let i: number = 1; i < 3; i++) {
// let toggle: Toggle = layout.mingYunNode.getChildByName("ToggleGroup").getChildByName(`Toggle${i}`).getComponent(Toggle);
// let attr: { tag: number } = {
// tag: i
// }
// toggle.node.attr(attr);
// toggle.node.on('toggle', (target: Toggle) => {
// tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
// //@ts-ignore
// this._changeMingYunToggleChecked(target.node.tag);
// //@ts-ignore
// this._mingYunChooseTag = target.node.tag;
// }, this);
// }
// for (let i: number = 1; i < 3; i++) {
// let toggle: Toggle = layout.bigSkillNode.getChildByName("ToggleGroup").getChildByName(`Toggle${i}`).getComponent(Toggle);
// let attr: { tag: number } = {
// tag: i
// }
// toggle.node.attr(attr);
// toggle.node.on('toggle', (target: Toggle) => {
// tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
// //@ts-ignore
// this._changeBigSkillToggleChecked(target.node.tag);
// }, this);
// }
this._initData();
this._updateUI(ETAG_NAME.Hero);
}
// 初始化全部数据
private _initData() : void{
this._updateSpine();
this._updateName();
this._updateHeroType();
this._updateHeroCount();
this._updateHeroNode();
// this._updateSkinNode();
this._updateDestiny();
this._updateBigSkill();
this._changeMingYunToggleChecked();
this._changeBigSkillToggleChecked();
this._updateHeroSpine();
this._updateBuyBtnActive();
}
// 背景介绍
private _openDetail() : void{
console.log("打开背景介绍");
let curHeroData = areanMgr.cfgMgr.HeroDatas.getData(this._curChooseHeroID);
if(curHeroData){
tgxUIMgr.inst.showUI(UIHeroStory,null,null,`${curHeroData.name}的背景介绍\n${curHeroData.describe}`);
}
}
// 更新英雄spine
private _updateSpine() : void{
let localHeroData = areanMgr.cfgMgr.HeroDatas.getAllDataMap();
let curHeroData = localHeroData.get(this._curChooseHeroID);
if(curHeroData){
// resLoader.load<Prefab>(ModuleDef.Arean,`res/Prefebs/heroSpine/${curHeroData.skinRes}`,(err: Error, prefab: Prefab) => {
// if(err){
// console.error(err);
// return;
// }else {
// let layout: Layout_UICollection = this.layout as Layout_UICollection;
// let spineNode = instantiate(prefab);
// layout.heroSpineNode.destroyAllChildren();
// layout.heroSpineNode.addChild(spineNode);
// }
// })
}else {
console.error(`${this._curChooseHeroID}英雄数据不存在`);
}
}
// 更新英雄名字
private _updateName() : void{
let localHeroData = areanMgr.cfgMgr.HeroDatas.getAllDataMap();
let curHeroData = localHeroData.get(this._curChooseHeroID);
let layout: Layout_UICollection = this.layout as Layout_UICollection;
layout.heroName.string = "";
if(curHeroData){
layout.heroName.string = curHeroData.name;
}else {
console.error(`更新英雄名字${this._curChooseHeroID}英雄数据不存在`);
}
if(curHeroData){
let skinData = areanMgr.cfgMgr.SkinData.getData(curHeroData.skinRes[0]);
if(skinData){
layout.skinName.string = skinData.name;
}
}
}
// 更新英雄类型图标
private _updateHeroType() : void{
let layout: Layout_UICollection = this.layout as Layout_UICollection;
let heroTypeNode = layout.heroTypeNode;
for (let i = 1; i < 4; i++) {
}
}
// 英雄数量
private _updateHeroCount() : void{
let layout: Layout_UICollection = this.layout as Layout_UICollection;
let count = UserMgr.inst.userInfo.hero.length;
let allCount = areanMgr.cfgMgr.HeroDatas.getAllData().length;
layout.heroCount.string = `${count}/${allCount}`;
}
// 当前选择的英雄数据
private _getCurHeroData() : IServerHeroData{
return this._userInfo.hero.find((v)=> v.heroId === this._curChooseHeroID);
}
private _updateHeroNode() : void{
let layout: Layout_UICollection = this.layout as Layout_UICollection;
let curHeroData = areanMgr.cfgMgr.HeroDatas.getData(this._curChooseHeroID);
let icon = layout.heroNode.getChildByName("icon");
let heroName = layout.heroNode.getChildByName("heroName");
if(curHeroData){
// let sp : SpriteFrame = resLoader.getSpriteFrame(`res/heroImg/${curHeroData.id}`,ModuleDef.Arean);
// if(sp) icon.getComponent(Sprite).spriteFrame = sp;
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);
icon.destroyAllChildren();
icon.addChild(spineNode);
spineNode.scale = v3(0.8,0.8,1);
spineNode.position = v3(0,-60,0);
spineNode.getComponent(sp.Skeleton).animation = null;
}
})
let skinData = areanMgr.cfgMgr.SkinData.getData(curHeroData.skinRes[0]);
if(skinData){
heroName.getComponent(Label).string = skinData.name;
}
}
}
// 命运
private _updateDestiny() : void{
let layout: Layout_UICollection = this.layout as Layout_UICollection;
let curHeroData = areanMgr.cfgMgr.HeroDatas.getData(this._curChooseHeroID);
if(curHeroData){
let destinyId : number = curHeroData.fateId;
let destinyData = areanMgr.cfgMgr.FateDatas.getData(destinyId);
let icon = layout.mingYunNode.getChildByName("icon");
let name = layout.mingYunNode.getChildByName("lab2");
let content = layout.mingYunNode.getChildByName("content");
let sp : SpriteFrame = resLoader.getSpriteFrame(`res/Image/DestinyIcon/destiny_${destinyId}`,ModuleDef.Arean);
if(sp) icon.getComponent(Sprite).spriteFrame = sp;
name.getComponent(Label).string = destinyData.fateName;
content.getComponent(Label).string = destinyData.fateEffect;
}
}
// 刷新命运toggle状态
private _changeMingYunToggleChecked() : void{
let layout: Layout_UICollection = this.layout as Layout_UICollection;
let content = layout.mingYunNode.getChildByName("content");
let curHeroData = areanMgr.cfgMgr.HeroDatas.getData(this._curChooseHeroID);
let str = "";
if(curHeroData) {
let destinyId: number = curHeroData.fateId;
let destinyData = areanMgr.cfgMgr.FateDatas.getData(destinyId);
this._mingYunChooseTag === 1 ? str = destinyData.fateEffect : str = destinyData.fateDescribe;
}
let toggle = layout.mingYunNode.getChildByName("ToggleGroup");
toggle.getChildByName("Toggle1").getComponent(Toggle).isChecked = this._mingYunChooseTag === 1;
toggle.getChildByName("Toggle2").getComponent(Toggle).isChecked = this._mingYunChooseTag === 2;
content.getComponent(Label).string = str;
}
// 大招
private _updateBigSkill() : void{
let layout: Layout_UICollection = this.layout as Layout_UICollection;
let curHeroData = areanMgr.cfgMgr.HeroDatas.getData(this._curChooseHeroID);
if(curHeroData){
let skillData = areanMgr.cfgMgr.SkillDatas.getData(curHeroData.mainSkill[0]);
let icon = layout.bigSkillNode.getChildByName("icon");
let name = layout.bigSkillNode.getChildByName("lab2");
let content = layout.bigSkillNode.getChildByName("content");
let sp : SpriteFrame = resLoader.getSpriteFrame(`res/Image/skill/skillIcon_${skillData.id}`,ModuleDef.Arean);
if(sp) icon.getComponent(Sprite).spriteFrame = sp;
name.getComponent(Label).string = skillData.skillname;
content.getComponent(Label).string = skillData.effectDescribe;
}
}
// 刷新大招toggle状态
private _changeBigSkillToggleChecked() : void{
let layout: Layout_UICollection = this.layout as Layout_UICollection;
let content = layout.bigSkillNode.getChildByName("content");
let str = "";
let curHeroData = areanMgr.cfgMgr.HeroDatas.getData(this._curChooseHeroID);
if(curHeroData) {
let skillData = areanMgr.cfgMgr.SkillDatas.getData(curHeroData.mainSkill[0]);
this._bigSkillChooseTag === 1 ? str = skillData.effectDescribe : str = skillData.effectDescribe;
}
let toggle = layout.bigSkillNode.getChildByName("ToggleGroup");
toggle.getChildByName("Toggle1").getComponent(Toggle).isChecked = this._bigSkillChooseTag === 1;
toggle.getChildByName("Toggle2").getComponent(Toggle).isChecked = this._bigSkillChooseTag === 2;
content.getComponent(Label).string = str;
}
// // 初始化筛选条件的点击事件
// private _initLayout() {
// let layout : Layout_UICollection = this.layout as Layout_UICollection;
// let children : Node[] = layout.heroChooseLayout.children;
// let len : number = children.length;
// for (let i = 0; i < len; i++) {
// let element : Node = children[i];
// let attr : { tag : EHeroCondition} = {
// tag : i + 1
// }
// element.attr(attr);
// this.onButtonEvent(element,()=>{
// //@ts-ignore
// this._queryHeroCondition = element.tag;
// this._showChooseLayout();
// this._updateCurConditionLabel();
// this._initScrollView(ETAG_NAME.Hero);
// })
// }
//
// let children2 : Node[] = layout.skinChooseLayout.children;
// let len2 : number = children2.length;
// for (let i = 0; i < len2; i++) {
// let element : Node = children2[i];
// let attr : { tag : ESkinCondition} = {
// tag : i + 1
// }
// element.attr(attr);
// this.onButtonEvent(element,()=>{
// //@ts-ignore
// this._querySkinCondition = element.tag;
// this._showChooseLayout();
// this._updateCurConditionLabel();
// this._initScrollView(ETAG_NAME.Skin);
// })
// }
// }
// 刷新英雄toggle状态
private _changeHeroToggleChecked(uiName: EHeroType) {
this._ConditionHeroNodes.forEach((node : Node,_name : EHeroType)=>{
let choose : Node = node.getChildByName("Checkmark");
choose.active = _name === uiName;
})
// if(this._curChooseHeroType === uiName) return;
this._curChooseHeroType = uiName;
// this._updateScrollView(ETAG_NAME.Hero,uiName);
this._initScrollView(ETAG_NAME.Hero);
}
// 刷新皮肤toggle状态
private _changeSkinToggleChecked(uiName: ESkinQuality) {
this._ConditionSkinNodes.forEach((node : Node,_name : ESkinQuality)=>{
let choose : Node = node.getChildByName("Checkmark");
choose.active = _name === uiName;
})
if(this._curChooseSkinQuality === uiName) return;
this._curChooseSkinQuality = uiName - 6;
// this._updateScrollView(ETAG_NAME.Skin,uiName);
this._initScrollView(ETAG_NAME.Skin);
}
// 刷新界面
private _updateUI(curTag : ETAG_NAME) : void{
// if(this._curTagName == curTag){
// return;
// }
this._curTagName = curTag;
// 更新UI
this._initScrollView(this._curTagName);
}
// 初始化滚动视图
private _initScrollView(curTagName : ETAG_NAME) : void{
let layout : Layout_UICollection = this.layout as Layout_UICollection;
let content : Node = layout.scrollContent.content;
content.destroyAllChildren();
this._initHeroScroll();
}
// 是否有此英雄
private _checkIsHaveHero(heroId : number) : boolean{
return true;
}
// 是否有此皮肤
private _checkIsHaveSkin(heroId : number) : boolean{
return true;
}
// 英雄是否满足手动查询的条件
private _checkIsCanSearchHero(data : IHeroCfg) : boolean{
return this._inputCustomHeroName.length === 0 || data.name.indexOf(this._inputCustomHeroName) != -1;
}
// 英雄是否满足手动查询的条件
private _checkIsCanSearchSkin(data : ISkinCfg) : boolean{
return this._inputCustomSkinName.length === 0 || data.name.indexOf(this._inputCustomSkinName) != -1;
}
// 英雄排序
private _sortHero() : IHeroCfg[]{
let heroLocalData : IHeroCfg[] = areanMgr.cfgMgr.HeroDatas.getAllData();
let deepArr = JSON.parse(JSON.stringify(heroLocalData));
let result : IHeroCfg[] = [];
let _sort = (arr : IHeroCfg[])=>{
if(this._queryHeroCondition === EHeroCondition.Date){
deepArr.sort((a : IHeroCfg, b : IHeroCfg) => {
return b.id - a.id;
});
}else if(this._queryHeroCondition === EHeroCondition.Letter){
deepArr.sort((a : IHeroCfg, b : IHeroCfg) => {
return a.id - b.id;
});
}else if(this._queryHeroCondition === EHeroCondition.Degree){
deepArr.sort((a : IHeroCfg, b : IHeroCfg) => {
return a.id - b.id;
});
}else if(this._queryHeroCondition === EHeroCondition.Score){
deepArr.sort((a : IHeroCfg, b : IHeroCfg) => {
return a.id - b.id;
});
}
}
_sort(result);
// 已有的英雄
let haveHeroArr : IServerHeroData[] = UserMgr.inst.userInfo.hero;
for (let i : number = 0; i < haveHeroArr.length; i++) {
let serverData = haveHeroArr[i];
let data : IHeroCfg = deepArr.find((emement)=> emement.id === serverData.heroId);
if(data){
let heroData = areanMgr.cfgMgr.HeroDatas.getData(data.id);
result.push(heroData);
const indexToRemove = deepArr.findIndex((element) => element === data);
if (indexToRemove !== -1) {
deepArr.splice(indexToRemove, 1);
}
}
}
// 没有的英雄
_sort(deepArr)
return result.concat(deepArr);
}
// 初始化英雄滚动视图
private _initHeroScroll() : void{
let layout : Layout_UICollection = this.layout as Layout_UICollection;
let content : Node = layout.scrollContent.content;
let heroLocalData : IHeroCfg[] = this._sortHero();
console.log("当前拥有的英雄信息 === ",this._userInfo.hero)
let showLen:number = heroLocalData.length;
const row : number = 3;
const col : number = 5;
let realCount : number = Math.ceil(showLen / row) * col;
const defaultCount : number = row * col;
let count : number = realCount <= defaultCount ? defaultCount : realCount;
for(let i : number = 0; i < count; i++){
let v : IHeroCfg = heroLocalData[i];
let isShow = v ? (this._curChooseHeroType === EHeroType.None || this._curChooseHeroType === v.arms) && this._checkIsCanSearchHero(v) : false;
let item : Node = instantiate(layout.heroCell);
item.active = isShow;
content.addChild(item);
let comp : HeroItem = item.getComponent(HeroItem);
let d = null;
if(v) d = this._userInfo.hero.find((h)=>h.heroId === v.id );
let heroId = v ? v.id : -1;
comp.initData(v, d,this._openHeroDetail.bind(this),this._curChooseHeroID,heroId);
}
}
private _updateHeroSpine() : void{
let layout : Layout_UICollection = this.layout as Layout_UICollection;
let localHeroData = areanMgr.cfgMgr.HeroDatas.getAllDataMap();
let curHeroData = localHeroData.get(this._curChooseHeroID);
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 {
layout.heroSpineNode.destroyAllChildren();
let spineNode = instantiate(prefab);
layout.heroSpineNode.addChild(spineNode);
// spineNode.position = v3(0,-55,0);
}
})
}else {
console.error(`${UserMgr.inst.userInfo.heroId}英雄数据不存在`);
}
}
private _resetChooseKuang() : void{
let layout : Layout_UICollection = this.layout as Layout_UICollection;
let content : Node = layout.scrollContent.content;
let len = content.children.length;
for (let i = 0; i < len; i++) {
let element = content.children[i];
let kuang = element.getChildByName("kuang");
if(kuang) kuang.active = false;
}
}
// 英雄详情界面
private _openHeroDetail(heroId : number) : void{
// console.log("打开英雄详情界面",heroId);
this._curChooseHeroID = heroId;
this._initData();
this._updateHeroSpine();
this._updateBuyBtnActive();
this._resetChooseKuang();
this._changeMingYunToggleChecked();
this._changeBigSkillToggleChecked();
// tgxUIMgr.inst.showUI(UIHero,null,null,{heroId : heroId,openType : this._curTagName});
}
// 更新滚动视图
private _updateScrollView(curTagName : ETAG_NAME,condition : EHeroType | ESkinQuality) : void{
this._updateHeroScroll(condition as EHeroType);
}
// 更新英雄滚动视图
private _updateHeroScroll(condition : EHeroType) : void{
let layout : Layout_UICollection = this.layout as Layout_UICollection;
let content : Node = layout.scrollContent.content;
let children : Node[] = content.children;
let len : number = children.length;
for (let i = 0; i < len; i++) {
let element : Node = children[i];
let comp : HeroItem = element.getComponent(HeroItem);
element.active = condition === EHeroType.None || comp.heroData.arms === condition;
}
}
// 购买按钮是否可见
private _updateBuyBtnActive() : void{
let layout : Layout_UICollection = this.layout as Layout_UICollection;
let heroData = this._getCurHeroData();
layout.btnBuy.node.active = heroData == null;
layout.btnBuy2.node.active = heroData == null;
layout.heroNode.active = heroData != null;
layout.showSkinNodeBtn.node.active = heroData != null;
if(heroData == null){
let propData = areanMgr.cfgMgr.PropData.getData(this._curChooseHeroID);
if(propData){
layout.btnBuy.node.getChildByName("name3").getComponent(Label).string = `${this._calPrice(propData,EAreanBuyType.Coin)}`;
layout.btnBuy2.node.getChildByName("name3").getComponent(Label).string = `${this._calPrice(propData,EAreanBuyType.Diamond)}`;
}
}
}
/** 英雄价格 */
private _calPrice(propData : IPropCfg,_type : EAreanBuyType) : number{
let price : number = 0;
let arr : number[][] = propData.price;
for(let i : number = 0; i < arr.length; i++){
let elem : number[] = arr[i];
if(elem[0] == _type){
price = elem[1];
}
}
return price;
}
/**
* 购买英雄
* @param _type 类型
* @private
*/
private async _buyHero(_type : EAreanBuyType) {
let propData : IPropCfg = areanMgr.cfgMgr.PropData.getData(this._curChooseHeroID);
let coinPrice : number = this._calPrice(propData,EAreanBuyType.Coin);
let diamondPrice : number = this._calPrice(propData,EAreanBuyType.Diamond);
let sure = async () => {
console.log("要购买的英雄 === ", this._curChooseHeroID);
if (this._curChooseHeroID !== null) {
let canBuy : boolean = false;
if(propData) {
// 金币
if(_type === EAreanBuyType.Coin){
canBuy = UserMgr.inst.userInfo.coin >= coinPrice;
}else{ //银币
canBuy = UserMgr.inst.userInfo.diamond >= diamondPrice;
}
}
if(canBuy){
let ret = await UserMgr.inst.rpc_addHero(UserMgr.inst.userId, this._curChooseHeroID,_type);
console.log("要购买的英雄结果 === ", ret);
let buyResult : string = "购买失败";
if (ret.res.code === 0) {
buyResult = "购买成功";
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_BUY_HERO);
tgxUIMgr.inst.showUI(UIGetHero, null, null, {heroId: ret.res.heroId});
let tmp: IServerHeroData = {
// 英雄ID
heroId: ret.res.heroId,
/** 所属玩家ID */
playerId: UserMgr.inst.userId,
/** 英雄等级 */
level: 0,
/** 所用的皮肤Id */
skinId: 0,
/** 熟练度 */
proficiency: 0,
/** 头盔装备ID */
headId: 0,
/** 衣服装备ID */
clothId: 0,
/** 脚装备ID */
footId: 0,
/** 武器装备ID */
weaponId: 0,
/** 是否锁定 */
isLock: false
}
UserMgr.inst.userInfo.hero.push(tmp);
UserMgr.inst.userInfo.coin = ret.res.curCoin;
UserMgr.inst.userInfo.diamond = ret.res.curDiamond;
if(ret.res.item.itemId > -1){
CommonFun.getInstance().updateItemList(ret.res.item);
}
director.emit(RoomEvent.ChangeCoin);
this._initData();
this._updateUI(ETAG_NAME.Hero);
}
tgxUITipsBar.show(buyResult);
}else{
tgxUITipsBar.show("货币不足");
}
}
}
let str = `是否确认花费${coinPrice}金币购买英雄`;
// 银币
if(_type == EAreanBuyType.Diamond){
str = `是否确认花费${diamondPrice}银币购买英雄`;
}
tgxUIAlert.show(str,true).onClick((ok: boolean) => {
if (ok) {
sure();
}
});
}
/** 展示皮肤节点 */
private _showSkinNode() : void{
let layout : Layout_UICollection = this.layout as Layout_UICollection;
layout.skinNode.active = !layout.skinNode.active;
let angle = layout.showSkinNodeBtn.node.getChildByName("arrow").angle;
layout.showSkinNodeBtn.node.getChildByName("arrow").angle = angle === 180 ? 0 : 180;
}
}