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

167 lines
5.5 KiB
TypeScript

import AudioUtil from "../core/AudioUtil";
import GameModel from "../core/GameModel";
import FGUtil from "../gear_2.3.4/fgui/FGUtil";
import SKUIUtil from "../gear_2.3.4/util/SKUIUtil";
import SKDataUtil from "../gear_2.3.4/util/SKDataUtil";
import ItemUtil from "../core/ItemUtil";
const {ccclass, property} = cc._decorator;
@ccclass
export default class active_panel extends cc.Component {
/**
* 信物面板單例實例
*/
public static Instance: active_panel = null;
/**
* 信物面板
*/
panel: fgui.GComponent = null;
/**
* 需要加載的預製體
*/
prefabObject: any = {};
/**
* 代理
*/
delegte: any = null
onLoad() {
if (active_panel.Instance === null) {
active_panel.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:any) {
this.delegte = delegte
}
getMinLevel(){
let level = 0
for (let index = 0; index < this.delegte.info.length; index++) {
let data = this.delegte.info[index];
if(data.level < level || level == 0){
level = data.level
}
}
return level
}
openActivePanel() {
if (!this.panel || (this.panel && !this.panel.node && !SKUIUtil.isValid(this.panel.node))) {
this.panel = FGUtil.create("main_ui", "bagua_info");
FGUtil.root().addChild(this.panel);
FGUtil.fitScreen(this.panel)
}
const index = this.delegte.index
FGUtil.getButton(this.panel,"btn_change").onClick((e:Event,id:number=0) => {
this.delegte.onDownTuJian()
this.close()
},this)
FGUtil.getButton(this.panel,"mask").onClick((e:Event,id:number=0) => {
this.close()
},this)
var atr = this.getMinLevel() / 10
FGUtil.getTextField(this.panel,"label_name").text = GameModel.game_conf.ZhenFa[index].title
let label = FGUtil.getRichTextField(this.panel,"label_desc")
label.text = cc.js.formatStr(GameModel.game_conf.ZhenFa[index].atr_tips, atr)
label.setVar("c", "#FFFFFF")
label.flushVars()
const ZhenFaItemCount = 8
const count = GameModel.game_conf.ZhenFa[index].valid_pos.length
for (var i = 0;i < ZhenFaItemCount;++i) {
FGUtil.getComponent(this.panel, "item" + (i + 1) + "_2").visible = false
}
for (var i = 0;i < count;++i) {
for (var j = 0;j < ZhenFaItemCount;++j) {
if (GameModel.game_conf.ZhenFa[index].valid_pos[i] == j) {
FGUtil.getComponent(this.panel,"item" + (j + 1) + "_2").visible = true
break
}
}
}
let list = FGUtil.getList(this.panel, "group_info/list_item")
list.itemRenderer = this.initAttrList.bind(this)
list.numItems = count
}
getAttrName(classify, attr:number) {
if (0 == classify) {
const attr_name = ['加強攻擊','加強速度','加強魅惑','加強加防','加強治愈','加強橫掃','加強破甲'
,'加強震擊','忽視水','忽視雷','忽視火','忽視風','忽視封印','忽視混亂','忽視昏睡','忽視毒'
,'忽視遺忘','忽視鬼火','忽視三尸蟲','忽視抗震懾','強力克金','強力克木','強力克水','強力克火'
,'強力剋土']
return attr_name[attr]
} else {
const attr_name = ['抗水法','抗雷法','抗火法','抗風法','抗封印','抗混亂','抗昏睡'
,'抗中毒','抗遺忘','抗鬼火','抗三尸蟲','物理吸收','抗震懾','躲閃']
return attr_name[attr]
}
}
initAttrList(idx, obj) {
let pos = GameModel.game_conf.ZhenFa[this.delegte.index].valid_pos[idx]
FGUtil.getControl(obj, "ctrl_type").selectedIndex = pos
let label = FGUtil.getRichTextField(obj, "label_desc")
label.ubbEnabled = true
label.text = `[color=#FFFFFF]無屬性激活[/color]`
label.flushVars()
FGUtil.getProgressBar(obj, "progress_value").visible = false
FGUtil.getTextField(obj, "label_attr1").visible = false
let item = null
for (let index = 0; index < this.delegte.list.length; index++) {
let _item = this.delegte.list[index];
if(_item.pos == pos){
item = _item
}
}
if(item == null)return
let data = ItemUtil.getItemData(item.id)
let desp = this.getAttrName(data.classify, item.attr)
label.text = `[color=#02F15D]${desp}[/color]`
label.flushVars()
FGUtil.getTextField(obj, "label_attr1").visible = true
FGUtil.getTextField(obj, "label_attr1").text = (item.value / 10).toFixed(1) + "%"
FGUtil.getProgressBar(obj, "progress_value").visible = true
FGUtil.getProgressBar(obj, "progress_value").value = (item.value / item.max) * 100
}
//關閉
close() {
this.destroy()
FGUtil.dispose(this.panel);
this.panel = null;
}
}