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

736 lines
30 KiB
TypeScript
Raw Normal View History

2025-02-07 10:49:34 +08:00
/************************************************************************************
* 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;
}
}