167 lines
7.2 KiB
TypeScript
167 lines
7.2 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)
|
||
}
|
||
} |