squidGame/tgx-games-client/assets/module_arean/ui_player_info/UIChooseHeadLayer.ts

167 lines
7.0 KiB
TypeScript
Raw Permalink Normal View History

2025-02-07 10:49:34 +08:00
/************************************************************************************
* FileName : UIChooseHeadLayer.ts
* Description :
* Version : v1.0.0
* CreateTime : 2025-01-02 10:42:19
* Author :
* Copyright (c) 2025
* ==============================================================
* Method Description:
*
* ==============================================================
************************************************************************************/
import {GameUILayers} from "db://assets/scripts/GameUILayers";
import {tgx_class} from "db://assets/core_tgx/base/ModuleContext";
import {ModuleDef} from "db://assets/scripts/ModuleDef";
import {tgxAudioMgr, tgxUIController, tgxUITipsBar} from "db://assets/core_tgx/tgx";
import {Layout_UIChooseHeadLayer} from "db://assets/module_arean/ui_player_info/Layout_UIChooseHeadLayer";
import {EMusicDefine} from "db://assets/module_basic/scripts/MusicDefine";
import { Toggle, Node, instantiate, Input, EventTouch, SpriteFrame, Sprite, assetManager, director } from "cc";
import {UserMgr} from "db://assets/module_basic/scripts/UserMgr";
import {areanMgr} from "db://assets/module_arean/scripts/AreanManager";
import {IHeadCfg} from "db://assets/module_basic/shared/configs/interface/IHeadCfg";
import {IHeadFrameCfg} from "db://assets/module_basic/shared/configs/interface/IHeadFrameCfg";
@tgx_class(ModuleDef.Arean)
export class UIChooseHeadLayer extends tgxUIController{
private _conditionNodes: Map<number, Node> = new Map<number, Node>();
private _curChooseType : number = 1; //1:头像2头像框
private _curChooseIndex : number = 0;
constructor() {
super("ui_player_info/chooseHeadLayer", GameUILayers.POPUP,Layout_UIChooseHeadLayer);
}
protected onCreated(params: any) {
let layout : Layout_UIChooseHeadLayer = this.layout as Layout_UIChooseHeadLayer;
this.onButtonEvent(layout.sureBtn, () => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
this._changeHeadOrFrame();
})
for (let i: number = 1; i < 3; i++) {
let toggle: Toggle = layout.group.getChildByName(`Toggle${i}`).getComponent(Toggle);
let attr: { tag: number } = {
tag: i
}
toggle.node.attr(attr);
this._conditionNodes.set(i, toggle.node);
toggle.node.on('toggle', (target: Toggle) => {
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
//@ts-ignore
this._changeHeroToggleChecked(target.node.tag)
}, this);
}
this._updateList();
}
/** 替换头像或者头像框 */
private _changeHeadOrFrame() {
let isHave = UserMgr.inst.userInfo.itemList.find((item)=>item.itemId == this._curChooseIndex);
if(!isHave) {
tgxUITipsBar.show("暂未拥有");
return;
}
if(this._curChooseType === 1) {
if(this._curChooseIndex === UserMgr.inst.userInfo.visualId) {
tgxUITipsBar.show("更换成功");
this.close();
return;
}
}
if(this._curChooseType === 2) {
if(this._curChooseIndex === UserMgr.inst.userInfo.frameIcon) {
tgxUITipsBar.show("更换成功");
this.close();
return;
}
}
let headId = this._curChooseType === 1 ? this._curChooseIndex : UserMgr.inst.userInfo.visualId;
let frameId = this._curChooseType === 2 ? this._curChooseIndex : UserMgr.inst.userInfo.frameIcon;
UserMgr.inst.rpc_update_head_frame(headId,frameId).then((ret)=>{
console.log("替换头像或者头像框",ret);
if(ret.isSucc) {
this._updateHeadOrFrameResult();
}
})
}
private _updateHeadOrFrameResult() : void {
if(this._curChooseType === 1) {
UserMgr.inst.userInfo.visualId = this._curChooseIndex;
}else{
UserMgr.inst.userInfo.frameIcon = this._curChooseIndex;
}
tgxUITipsBar.show("更换成功");
director.emit("AreanEvent.UpdateHeadOrFrame");
this.close();
}
/** 刷新状态 */
private _changeHeroToggleChecked(uiName: number) {
this._conditionNodes.forEach((node : Node,_name : number)=>{
let choose : Node = node.getChildByName("Checkmark");
choose.active = _name === uiName;
})
if(this._curChooseType === uiName) return;
this._curChooseType = uiName;
this._curChooseIndex = null;
this._updateList();
}
private _updateList() {
let layout : Layout_UIChooseHeadLayer = this.layout as Layout_UIChooseHeadLayer;
layout.content.destroyAllChildren();
let headList = areanMgr.cfgMgr.HeadData.getAllData();
let frameList = areanMgr.cfgMgr.HeadFrameData.getAllData();
let arr = this._curChooseType === 1 ? headList : frameList;
let len = arr.length;
for (let i = 1; i <= len; i++) {
let data = arr[i - 1];
let node = instantiate(layout.cell);
node.active = true;
layout.content.addChild(node);
this._initCellData(node,data);
}
}
private _resetChooseState() : void{
let layout : Layout_UIChooseHeadLayer = this.layout as Layout_UIChooseHeadLayer;
let child = layout.content.children;
for (let i = 0; i < child.length; i++) {
let c = child[i];
let choose = c.getChildByName("choose");
if(choose) choose.active = false;
}
}
// 单个cell数据
private _initCellData(node : Node,data : IHeadCfg | IHeadFrameCfg) : void {
let icon = node.getChildByName("icon");
let bundle = assetManager.getBundle(ModuleDef.BASIC);
bundle.load('icons/' + data.icon + "/spriteFrame", (err, sp: SpriteFrame) => {
if(sp) icon.getComponent(Sprite).spriteFrame = sp;
});
let atrr = {
tag : data.id,
}
let isHave = UserMgr.inst.userInfo.itemList.find((item)=>item.itemId == data.id);
let mask = node.getChildByName("mask");
mask.active = isHave === null || isHave === undefined;
let choose = node.getChildByName("choose");
if(this._curChooseType === 1){
choose.active = data.id === UserMgr.inst.userInfo.visualId;
this._curChooseIndex = UserMgr.inst.userInfo.visualId;
}else{
choose.active = data.id === UserMgr.inst.userInfo.frameIcon;
this._curChooseIndex = UserMgr.inst.userInfo.frameIcon;
}
node.attr(atrr);
node.on(Input.EventType.TOUCH_END,(event: EventTouch)=>{
tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
let index = event.currentTarget.tag;
this._curChooseIndex = index;
this._resetChooseState();
event.currentTarget.getChildByName("choose").active = true;
console.log("点击选择的index === ",index)
},this)
}
}