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

167 lines
7.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************************
* 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)
}
}