/************************************************************************************ * 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 = new Map(); 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) } }