2025-04-24 17:03:28 +08:00

264 lines
8.8 KiB
TypeScript

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
}
}