squidGame/tgx-games-client/assets/module_arean/ui_bag/UIBag.ts

205 lines
8.5 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {director, instantiate, Label, Node, Toggle} from "cc";
import {tgx_class, tgxAudioMgr, tgxUIController, tgxUITipsBar} from "db://assets/core_tgx/tgx";
import {GameUILayers} from "db://assets/scripts/GameUILayers";
import {ModuleDef} from "db://assets/scripts/ModuleDef";
import {Layout_UIBag} from "db://assets/module_arean/ui_bag/Layout_UIBag";
import {UserMgr} from "db://assets/module_basic/scripts/UserMgr";
import {
BagToggleArray,
EAreanItemType, IRewardData,
ItemAttributes
} from "db://assets/module_basic/shared/protocols/public/arean/AreanTypeDef";
import {areanMgr} from "db://assets/module_arean/scripts/AreanManager";
import {BagItem} from "db://assets/module_arean/ui_bag/BagItem";
import {BagItemDetail} from "db://assets/module_arean/ui_bag/BagItemDetail";
import {CommonFun} from "db://assets/module_arean/scripts/CommonFun";
import {RoomEvent} from "db://assets/module_basic/scripts/GameMgr";
import {EMusicDefine} from "db://assets/module_basic/Define/MusicDefine";
import { IPropCfg } from "../../module_basic/shared/configs/interface/IPropCfg";
@tgx_class(ModuleDef.Arean)
export class UIBag extends tgxUIController {
private _conditionBagNodes: Map<number, Node> = new Map<number, Node>();
private _curChooseBagType : EAreanItemType = EAreanItemType.None;
/** 当前显示的道具 */
private _curShowItems : ItemAttributes[] = [];
/** 当前选中的道具 */
private _curChooseItemID : number = null;
constructor() {
super("ui_bag/ui_bag", GameUILayers.POPUP, Layout_UIBag);
}
protected onCreated(): void {
let layout = this.layout as Layout_UIBag;
console.log("道具信息 ===",UserMgr.inst.userInfo.itemList);
this.onButtonEvent(layout.btnClose, () => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLOSE);
this.close();
});
let detail : BagItemDetail = layout.itemDetail.getComponent(BagItemDetail);
detail.setCallBack((result)=>{
console.log("道具使用详情回调 ===",result);
let res = result.res;
if(res.code === 0){
let item = res.item;
let reward = res.rewards;
CommonFun.getInstance().updateItemList(item);
CommonFun.getInstance().updateCurrey(reward);
director.emit(RoomEvent.ChangeCoin);
this._useItemResult(item,reward);
}else{
tgxUITipsBar.show("使用失败");
}
})
let len : number = BagToggleArray.length;
for (let i : number = 0; i < len; i++) {
let element = BagToggleArray[i];
let node = layout.toggleGroup.getChildByName(`Toggle${i + 1}`);
node.active = true;
let toggle : Toggle = node.getComponent(Toggle);
node.getChildByName("name").getComponent(Label).string = element.name;
let attr : { tag : number,type : EAreanItemType} = {
tag : i,
type : element.type
}
toggle.node.attr(attr);
this._conditionBagNodes.set(i,toggle.node);
toggle.node.on('toggle', (target: Toggle)=>{
//@ts-ignore
this._changeHeroToggleChecked(target.node.tag,target.node.type)
}, this);
}
this._updateBagList();
this._updateDetail();
}
/** 获取选择展示的背包类型 */
private _getChooseType(index : number) : EAreanItemType {
let len : number = BagToggleArray.length;
for (let i = 0; i < len; i++) {
if(i === index){
return BagToggleArray[i].type;
}
}
return EAreanItemType.None;
}
// 刷新英雄toggle状态
private _changeHeroToggleChecked(index: number,chooseType : EAreanItemType) {
this._conditionBagNodes.forEach((node : Node,_name : number)=>{
let choose : Node = node.getChildByName("Checkmark");
choose.active = _name === index;
})
let curChooseType : EAreanItemType = this._getChooseType(index);
if(this._curChooseBagType === curChooseType) return;
this._curChooseBagType = curChooseType;
// this._updateScrollView(ETAG_NAME.Hero,uiName);
this._updateBagList();
this._updateDetail();
}
/** 是否属于全部展示的道具 */
private _isExistAll(_type : EAreanItemType) : boolean{
return _type !== EAreanItemType.Currency && _type !== EAreanItemType.Hero && _type !== EAreanItemType.Skin;
}
/** 计算当前标签要展示的道具 */
private _calBagItem() : void{
this._curShowItems.length = 0;
let items : ItemAttributes[] = UserMgr.inst.userInfo.itemList;
let len : number = items.length;
for (let i : number = 0; i < len; i++) {
let element : ItemAttributes = items[i];
let propData : IPropCfg = areanMgr.cfgMgr.PropData.getData(element.itemId);
if(this._curChooseBagType === EAreanItemType.None){
if(propData && this._isExistAll(propData.type)){
this._curShowItems.push(element);
}
}else{
if(propData && propData.type === this._curChooseBagType){
this._curShowItems.push(element);
}
}
}
}
/**刷新列表*/
private _updateBagList() : void {
let layout : Layout_UIBag = this.layout as Layout_UIBag;
layout.bagRoot.destroyAllChildren();
this._curChooseItemID = null;
this._calBagItem();
console.log("当前选择展示的背包类型 === ",this._curChooseBagType, this._curShowItems);
let len : number = this._curShowItems.length;
let index : number = 0;
for (let i : number = 0; i < len; i++) {
let element : ItemAttributes = this._curShowItems[i];
if(element.itemCount <= 0) continue;
if(index === 0) this._curChooseItemID = element.itemId;
index++;
let item : Node = instantiate(layout.itemPrefab);
layout.bagRoot.addChild(item);
item.active = true;
let comp : BagItem = item.getComponent(BagItem);
comp.setData(element,this._curChooseItemID,this.onClick.bind(this));
item.active = true;
}
}
/** 重置选中状态 */
private _resetChooseState() : void{
let layout : Layout_UIBag = this.layout as Layout_UIBag;
let child : Node[] = layout.bagRoot.children;
let len = child.length;
for (let i = 0; i < len; i++) {
let element = child[i];
let bagItem : BagItem = element.getComponent(BagItem);
if(bagItem) bagItem.updateChooseState(false);
}
}
/** 选择事件 */
onClick(element : ItemAttributes) : void {
console.log("选择的道具属性 === ",element);
this._curChooseItemID = element.itemId;
this._resetChooseState();
this._updateDetail();
}
/** 刷新详情 */
private _updateDetail() : void{
let layout : Layout_UIBag = this.layout as Layout_UIBag;
layout.itemDetail.active = this._curChooseItemID !== null;
layout.emptyLabelNode.active = this._curChooseItemID === null;
if(this._curChooseItemID){
let serverData : ItemAttributes = this._curShowItems.find((item : ItemAttributes) => item.itemId === this._curChooseItemID);
if(serverData){
let detail : BagItemDetail = layout.itemDetail.getComponent(BagItemDetail);
detail.setData(serverData);
}
}
}
/** 使用道具结果 */
private _useItemResult(item : ItemAttributes,reward : IRewardData[]) : void{
let layout : Layout_UIBag = this.layout as Layout_UIBag;
if(item){
let count = item.itemCount > 0;
layout.itemDetail.active = count;
let child : Node[] = layout.bagRoot.children;
let len : number = child.length;
let element : Node = child.find((e : Node) => e.getComponent(BagItem).getItemId() === item.itemId);
if(element){
element.active = count;
element.getComponent(BagItem).updateCount(item.itemCount);
}
CommonFun.getInstance().showCommonReward(reward);
}
}
}