167 lines
7.0 KiB
TypeScript
167 lines
7.0 KiB
TypeScript
|
/************************************************************************************
|
|||
|
|
|||
|
* 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)
|
|||
|
}
|
|||
|
}
|