import AudioUtil from "../core/AudioUtil"; import FGUtil from "../gear_2.3.4/fgui/FGUtil"; import SKUIUtil from "../gear_2.3.4/util/SKUIUtil"; import ItemUtil from "../core/ItemUtil"; import GameModel from "../core/GameModel"; import MsgAlert from "../game/msg/MsgAlert"; const {ccclass, property} = cc._decorator; @ccclass export default class equipList extends cc.Component { /** * 信物面板單例實例 */ public static Instance: equipList = null; /** * 信物面板 */ list: fgui.GComponent = null; /** * 代理 */ delegte: any = null /** * 位置索引 */ index:number = 0 /** * 需要加載的預製體 */ prefabObject: any = {}; onLoad() { if (equipList.Instance === null) { equipList.Instance = this; this.loadPrefab(); } else { this.destroy(); return; } } loadPrefab() { // 加載所需的預製體 var prefabList = [ // { url: "Prefabs/UIRole", name: "UIRole" }, ] this.prefabObject = {} for (let item of prefabList) { cc.loader.loadRes(item.url, cc.Prefab, (err, prefab) => { if (err) console.warn(err); else { this.prefabObject[item.name] = prefab; } }) } } setDelegte(delegte) { this.delegte = delegte } openItemList(index) { this.index = index if (!this.list || (this.list && !this.list.node && !SKUIUtil.isValid(this.list.node))) { this.list = FGUtil.create("main_ui", "bagua_my_posinfo"); FGUtil.root().addChild(this.list); FGUtil.fitScreen(this.list) } FGUtil.getComponent(this.list, "mask").onClick(() => { this.destroy() FGUtil.dispose(this.list); this.list = null; },this) const data = this.delegte.info const name_ary = ['乾位','巽位','坎位','艮位','坤位','震位','離位','兌位'] FGUtil.getTextField(this.list,"posname").text = name_ary[this.index] // FGUtil.getControl(this.list,"item/ctrl_type").selectedIndex = this.index FGUtil.getTextField(this.list,"lv").text = `${data[this.index].level}級/100級` FGUtil.getComponent(this.list,"n8").visible = (0 == data[this.index].itemID) FGUtil.getComponent(this.list,"img_item").visible = (0 != data[this.index].itemID) FGUtil.getButton(this.list,"btnlv").onClick((e:Event,id:number=0) => { this.delegte.onDownBaZhenTu() this.destroy() FGUtil.dispose(this.list); this.list = null; },this) if (0 != data[this.index].itemID) { var info = ItemUtil.getItemData(data[this.index].itemID) FGUtil.getLoader(this.list,"img_item").url = `ui://main_ui/${info.icon}`; } var list = FGUtil.getList(this.list,"list_item") list.itemRenderer = this.initEquipList.bind(this); // 虛擬列表 list.setVirtual(); this.refreshEquipListPanel(); } getAttrName(classify: number, attr:number) { if (0 == classify) { const attr_name = ['加強攻擊','加強速度','加強魅惑','加強加防','加強治愈','加強橫掃','加強破甲' ,'加強震擊','忽視水','忽視雷','忽視火','忽視風','忽視封印','忽視混亂','忽視昏睡','忽視毒' ,'忽視遺忘','忽視鬼火','忽視三尸蟲','忽視抗震懾','強力克金','強力克木','強力克水','強力克火' ,'強力剋土'] return attr_name[attr] } else { const attr_name = ['抗水法','抗雷法','抗火法','抗風法','抗封印','抗混亂','抗昏睡' ,'抗中毒','抗遺忘','抗鬼火','抗三尸蟲','物理吸收','抗震懾','躲閃'] return attr_name[attr] } } initEquipList(idx, obj: fairygui.GObject) { var item = obj.asCom; var tempList = this.getXwList() FGUtil.getLoader(item,"img_item").url = `ui://main_ui/${tempList[idx].icon}`; FGUtil.getTextField(item,"title").text = `${tempList[idx].name}` FGUtil.getControl(item,"isWear").selectedIndex = (this.isEquip(tempList[idx].id) ? 1 : 0 ) var index = this.getXwPosition(tempList[idx].id) if (-1 != index) FGUtil.getControl(item,"ctrl_type").selectedIndex = index FGUtil.getControl(item,"isShow").selectedIndex = (!!this.isCurXw(tempList[idx].id) ? 1 : 0) item.clearClick() item.onClick((e: Event, id: number = 0) => { let data = this.delegte.info let cnt = 0 let equip = false for (let index = 0; index < data.length; index++) { if(data[index].itemID != 0){ cnt++ } if(data[index].itemID == tempList[idx].id){ equip = true } } if(data[this.index].itemID == 0 && equip == false && cnt >= 5){ MsgAlert.addMsg("最多只能裝備5個信物") return } var itemID = tempList[idx].id GameModel.send("c2s_equipXwItem",{ pos: this.index, itemID: itemID }) this.destroy() FGUtil.dispose(this.list); this.list = null; },this) let data = ItemUtil.getItemData(tempList[idx].id) let xw = GameModel.player.getXwByItemID(tempList[idx].id) if(xw != null) { let skillName = "無屬性" let skillValue = 0 if(xw.attr1.pos == this.index){ skillName = this.getAttrName(data.classify, xw.attr1.index) skillValue = xw.attr1.value } if(xw.attr2.pos == this.index){ skillName = this.getAttrName(data.classify, xw.attr2.index) skillValue = xw.attr2.value } if(xw.attr3.pos == this.index){ skillName = this.getAttrName(data.classify, xw.attr3.index) skillValue = xw.attr3.value } FGUtil.getTextField(item, "attrname").text = skillName FGUtil.getTextField(item, "attrvalue").visible = false if(skillName != "無屬性"){ FGUtil.getTextField(item, "attrvalue").visible = true FGUtil.getTextField(item, "attrvalue").text = (skillValue / 10).toFixed(1) + "%" } }else{ FGUtil.getTextField(item, "attrname").text = "無屬性" FGUtil.getTextField(item, "attrvalue").visible = false } } getXwPosition(id) { var info = this.delegte.info const count = info.length for (var i = 0;i < count;++i) { if (0 != info[i].itemID && id == info[i].itemID) { return i } } return -1 } isCurXw(id) { var info = this.delegte.info return (id == info[this.index].itemID) } refreshEquipListPanel() { var xwlist = FGUtil.getList(this.list, "list_item"); xwlist.numItems = this.getXwList().length } getXwList() { var tempList = [] var list = ItemUtil.getItemsByType(18); var zhenfaInfo = this.delegte.info const s = zhenfaInfo.length const count = list.length var bHasItem = false for (var i = 0;i < s;++i) { if (!!bHasItem) break if (this.index == zhenfaInfo[i].index && 0 != zhenfaInfo[i].itemID) { bHasItem = false for (var j = 0;j < list.length;++j) { if (list[j].id == zhenfaInfo[i].itemID) { bHasItem = true tempList.push(list[j]) break } } } } for (var i = 0;i < s;++i) { if (this.index != zhenfaInfo[i].index && 0 != zhenfaInfo[i].itemID) { for (var j = 0;j < list.length;++j) { if (list[j].id == zhenfaInfo[i].itemID) { tempList.push(list[j]) } } } } var itemList = GameModel.player.itemList; const size = list.length for (var itemId in itemList) { for (var i = 0;i < size;++i) { if (list[i].id == parseInt(itemId)) { tempList.push(list[i]) break } } } return tempList } isEquip(itemID) : boolean { var zhenfaInfo = this.delegte.info const s = zhenfaInfo.length for (var i = 0;i < s;++i) { if (0 != zhenfaInfo[i].itemID && itemID == zhenfaInfo[i].itemID) { return true } } return false } }