264 lines
8.8 KiB
TypeScript
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
|
|
}
|
|
}
|
|
|
|
|