/************************************************************************************ * 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 = new Map(); private _ConditionSkinNodes: Map = new Map(); // 英雄筛选条件 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 { 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(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(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(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; } }