736 lines
30 KiB
TypeScript
736 lines
30 KiB
TypeScript
/************************************************************************************
|
||
|
||
* 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;
|
||
}
|
||
} |