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

261 lines
7.9 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 SKLocalUtil from "../gear_2.3.4/util/SKLocalUtil";
const ZhenFaItem_Count = (5)
const {ccclass, property} = cc._decorator;
@ccclass
export default class tuJian extends cc.Component {
/**
* 信物面板單例實例
*/
public static Instance: tuJian = null;
/**
* 信物面板
*/
tuJian: fgui.GComponent = null;
/**
* 需要加載的預製體
*/
prefabObject: any = {};
/**
* 設置當前頁碼
*/
private page_index:number = 0
/**
* 代理
*/
delegte: any = null
/**
* 是否打開該界面
*/
bOpen:boolean = false
/**
* 等級
*/
private lv:number = 0
onLoad() {
this.page_index = 0
this.lv = 10
this.bOpen = false
if (tuJian.Instance === null) {
tuJian.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
}
openTujian() {
if (!this.tuJian || (this.tuJian && !this.tuJian.node && !SKUIUtil.isValid(this.tuJian.node))) {
this.tuJian = FGUtil.create("main_ui", "bagua_collect_panel");
FGUtil.root().addChild(this.tuJian);
FGUtil.fitScreen(this.tuJian)
}
this.page_index = 0
this.lv = this.delegte.lv
this.bOpen = true
FGUtil.getControl(this.tuJian, "ctrl_type").selectedIndex = 0
let btnClose = FGUtil.getComponent(this.tuJian, "close")
this.pushCloseEvent(btnClose, this.tuJian, () => {
this.bOpen = false
AudioUtil.playCloseAudio()
// this.destroy()
});
FGUtil.getButton(this.tuJian, "btn_type1").onClick(this.clickZhenFa1, this);
FGUtil.getButton(this.tuJian, "btn_type2").onClick(this.clickZhenFa2, this);
FGUtil.getButton(this.tuJian, "btn_type3").onClick(this.clickZhenFa3, this);
FGUtil.getButton(this.tuJian, "btn_type4").onClick(this.clickZhenFa4, this);
FGUtil.getButton(this.tuJian, "btn_type5").onClick(this.clickZhenFa5, this);
FGUtil.getButton(this.tuJian, "btn_lv10").onClick(() => {
this.onDownLv(10)
}, this);
FGUtil.getButton(this.tuJian, "btn_lv20").onClick(() => {
this.onDownLv(20)
}, this);
FGUtil.getButton(this.tuJian, "btn_lv30").onClick(() => {
this.onDownLv(30)
}, this);
FGUtil.getButton(this.tuJian, "btn_lv40").onClick(() => {
this.onDownLv(40)
}, this);
FGUtil.getButton(this.tuJian, "btn_lv50").onClick(() => {
this.onDownLv(100)
}, this);
FGUtil.getControl(this.tuJian, "ctrl_lvSelected").selectedIndex = this.getLevelIndex()
// 設置物品列表初始化方法
var itemList = FGUtil.getList(this.tuJian, "list_item");
itemList.itemRenderer = this.initTujianItem.bind(this);
// 虛擬列表
itemList.setVirtual();
FGUtil.getButton(this.tuJian, "rect_touch").onClick(() => {
FGUtil.getControl(this.tuJian, "ctrl_fold").selectedIndex = 0;
},this)
FGUtil.getButton(this.tuJian, "btn_changeLv").onClick(this.clickChangeLv, this);
this.refreshTujianPanel()
this.onDownLv(10)
}
getLevelIndex() {
const lv_ary = [10,20,30,40,100]
for (var i = 0;i < lv_ary.length;++i) {
if (lv_ary[i] == this.lv) {
return i
}
}
return 0
}
updateUI() {
if (!this.bOpen) return
this.refreshTujianPanel()
}
onDownLv(lv) {
FGUtil.getControl(this.tuJian, "ctrl_fold").selectedIndex = 0;
this.lv = lv
this.refreshTujianPanel()
}
clickChangeLv() {
FGUtil.getControl(this.tuJian, "ctrl_fold").selectedIndex = 1;
}
initTujianItem(idx, obj: fairygui.GObject) {
var item = obj.asCom;
const index = this.getCurPageIndex(idx)
FGUtil.getControl(item, "ctrl_flagType").selectedIndex = GameModel.game_conf.ZhenFa[index].atr_type + 1;
this.showItemPos(item, GameModel.game_conf.ZhenFa[index].pos1, 1)
this.showItemPos(item, GameModel.game_conf.ZhenFa[index].pos2, 2)
FGUtil.getTextField(item,"label_name").text = GameModel.game_conf.ZhenFa[index].title
FGUtil.getControl(item,"ctrl_state").selectedIndex = (this.delegte.index == index ? 1: 0)
var atr = (this.lv / 10)
let label = FGUtil.getRichTextField(item, "label_tips")
label.ubbEnabled = true
label.text = cc.js.formatStr(GameModel.game_conf.ZhenFa[index].atr_tips, atr)
label.setVar("c", "#5C3900")
label.flushVars()
FGUtil.getButton(item,"btn_active").clearClick()
FGUtil.getButton(item,"btn_active").onClick((e: Event, id: number = 0) => {
GameModel.send("c2s_active_zhenfa_position", {
index: this.getCurPageIndex(idx),
level: this.lv
})
}, this)
}
getPageCount() {
const size = GameModel.game_conf.ZhenFa.length
var count = 0
for (var i = 0;i < size;++i) {
if (GameModel.game_conf.ZhenFa[i].type == this.page_index) {
count = count + 1
}
}
return count
}
getCurPageIndex(index:number) {
switch(this.page_index) {
case 0: {
return index
} case 1: {
return 5 + index
} case 2: {
return 10 + index
} case 3: {
return 15 + index
} case 4: {
return 21 + index
}
}
return 0
}
showItemPos(item:fairygui.GObject,pos_ary:boolean[],type:number) {
const size = pos_ary.length
for (var i = 0;i < size;++i) {
var str = "item" + (i + 1) + "_" + type
FGUtil.getComponent(item.asCom,str).visible = pos_ary[i]
}
}
refreshTujianPanel() {
if (!this.bOpen) return
var itemList = FGUtil.getList(this.tuJian, "list_item");
itemList.numItems = this.getPageCount()
}
clickZhenFa1() {
FGUtil.getControl(this.tuJian, "ctrl_type").selectedIndex = 0
this.page_index = 0
this.refreshTujianPanel()
}
clickZhenFa2() {
FGUtil.getControl(this.tuJian, "ctrl_type").selectedIndex = 1
this.page_index = 1
this.refreshTujianPanel()
}
clickZhenFa3() {
FGUtil.getControl(this.tuJian, "ctrl_type").selectedIndex = 2
this.page_index = 2
this.refreshTujianPanel()
}
clickZhenFa4() {
FGUtil.getControl(this.tuJian, "ctrl_type").selectedIndex = 3
this.page_index = 3
this.refreshTujianPanel()
}
clickZhenFa5() {
FGUtil.getControl(this.tuJian, "ctrl_type").selectedIndex = 4
this.page_index = 4
this.refreshTujianPanel()
}
pushCloseEvent(item: fairygui.GComponent, target: fairygui.GComponent, call: Function = null) {
item.clearClick();
item.onClick(() => {
call && call();
FGUtil.dispose(target);
target = null;
}, this)
}
}