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

491 lines
17 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import GameModel from "../core/GameModel";
import GameUtil from "../core/GameUtil";
import ItemUtil from "../core/ItemUtil";
import MsgAlert from "../game/msg/MsgAlert";
import FGUtil from "../gear_2.3.4/fgui/FGUtil";
import SKDataUtil from "../gear_2.3.4/util/SKDataUtil";
import SKUIUtil from "../gear_2.3.4/util/SKUIUtil";
const { ccclass, property } = cc._decorator;
export default class TianTiPanel extends cc.Component {
/**
* 轉盤單例實例
*/
public static Instance: TianTiPanel = null;
/**
* 勝利面板
*/
battleWinPanel: fgui.GComponent = null;
/**
* 失敗面板
*/
battleLosePanel: fgui.GComponent = null;
/**
* 天梯面板
*/
ManiPanel: fgui.GComponent = null;
/**
* 天梯面板总节点
*/
alrt: fgui.GComponent = null;
/**戰況節點 */
zhankuang: fgui.GComponent = null;
/**獎勵節點 */
jiangli: fgui.GComponent = null;
/**頭像節點 */
head: fgui.GLoader = null;
/**勝場 */
shengchang: fgui.GTextField = null;
/**敗場 */
baichang: fgui.GTextField = null;
/**積分 */
jifen: fgui.GTextField = null;
/**排名 */
paiming: fgui.GTextField = null;
//角色節點
com1: fgui.GComponent = null;
com2: fgui.GComponent = null;
com3: fgui.GComponent = null;
com4: fgui.GComponent = null;
com5: fgui.GComponent = null;
//排行信息
com1name: fgui.GTextField = null;
com2name: fgui.GTextField = null;
com3name: fgui.GTextField = null;
com4name: fgui.GTextField = null;
com5name: fgui.GTextField = null;
com1jifen: fgui.GTextField = null;
com2jifen: fgui.GTextField = null;
com3jifen: fgui.GTextField = null;
com4jifen: fgui.GTextField = null;
com5jifen: fgui.GTextField = null;
//按鈕
com1btn: fgui.GButton = null;
com2btn: fgui.GButton = null;
com3btn: fgui.GButton = null;
com4btn: fgui.GButton = null;
com5btn: fgui.GButton = null;
/**進入天梯地圖 */
jinMAPBTN: fgui.GButton = null;
/**真實天梯積分 */
tiantijifen: fgui.GTextField = null;
/**天梯時間 */
shijian: fgui.GTextField = null;
/**戰況標籤按鈕 */
zhankuangBtn: fgui.GButton = null;
/**戰況標籤按鈕 */
jiangliBtn: fgui.GButton = null;
/**兌換按鈕 */
buyBtn: fgui.GButton = null;
/**獎勵list */
jiangliList: fgui.GList = null;
itemList: any = {};
/**阻止點擊 */
stopTap: boolean = false;
/**
* 花費類型 0 風雨寶箱 1免費 2單次 3五連抽
*/
coastType: number = -1;
/**
* 需要加載的預製體
*/
prefabObject: any = {};
onLoad() {
if (TianTiPanel.Instance === null) {
TianTiPanel.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;
}
})
}
}
/**
* 打開天梯面板
*/
openTianTiPanel(refresh: boolean = false, data: any = null) {
if (!this.ManiPanel || (this.ManiPanel && !this.ManiPanel.node && !SKUIUtil.isValid(this.ManiPanel.node))) {
this.ManiPanel = FGUtil.create("main_ui", "TianTIPanel");//面板
this.alrt = FGUtil.getComponent(this.ManiPanel, "alrt");//總節點
this.zhankuang = FGUtil.getComponent(this.alrt, "zhankuang");//戰況節點
this.jiangli = FGUtil.getComponent(this.alrt, "jiangli");//獎勵節點
FGUtil.root().addChild(this.ManiPanel);
this.ManiPanel.makeFullScreen();
}
// 刷新顯示數據
if (refresh) {
if (data == null) {
console.warn("天梯數據錯誤")
return
}
// 刷新天梯數據
this.Refreshpandel(data);
return;
}
// 關閉按鈕
// let closeBtn = FGUtil.getButton(this.ManiPanel, "alert/close")
let closeBtn = FGUtil.getButton(this.alrt, "close")
this.pushCloseEvent(closeBtn, this.ManiPanel, () => { this.unscheduleAllCallbacks() });
//頭像
this.head = FGUtil.getLoader(this.zhankuang, "head");
this.head.url = `ui://main_ui/role_${GameModel.player.resid}`
//暱稱
FGUtil.getTextField(this.zhankuang, "nicheng").text = `${GameModel.player.name}`
//等級
FGUtil.getTextField(this.zhankuang, "dengji").text = `${GameModel.player.level}`
/**勝場 */
this.shengchang = FGUtil.getTextField(this.zhankuang, "shengchang")
this.shengchang.text = '0';
/**敗場 */
this.baichang = FGUtil.getTextField(this.zhankuang, "baichang")
this.baichang.text = '0';
/**積分 */
this.jifen = FGUtil.getTextField(this.zhankuang, "jifen")
this.jifen.text = '0';
//天梯時間
this.shijian = FGUtil.getTextField(this.zhankuang, "n20")
/**排名 */
this.paiming = FGUtil.getTextField(this.zhankuang, "paiming")
this.paiming.text = '0';
//獎勵界面
this.jiangliList = FGUtil.getList(this.jiangli, "list");//獎勵list
this.tiantijifen = FGUtil.getTextField(this.jiangli, "jifen");//自己的真實積分
this.buyBtn = FGUtil.getButton(this.jiangli, "buybnt");//兌換按鈕
this.buyBtn.onClick(this.onClickDuiHuan, this);
this.tiantijifen.text = `當前擁有真實積分:${GameModel.player.tianti_integral}`;
//角色節點
this.com1 = FGUtil.getComponent(this.zhankuang, "com1");
this.com2 = FGUtil.getComponent(this.zhankuang, "com2");
this.com3 = FGUtil.getComponent(this.zhankuang, "com3");
this.com4 = FGUtil.getComponent(this.zhankuang, "com4");
this.com5 = FGUtil.getComponent(this.zhankuang, "com5");
//排行信息
this.com1name = FGUtil.getTextField(this.zhankuang, "com1name");
this.com1name.text = '虚位以待';
this.com2name = FGUtil.getTextField(this.zhankuang, "com2name");
this.com2name.text = '虚位以待';
this.com3name = FGUtil.getTextField(this.zhankuang, "com3name");
this.com3name.text = '虚位以待';
this.com4name = FGUtil.getTextField(this.zhankuang, "com4name");
this.com4name.text = '虚位以待';
this.com5name = FGUtil.getTextField(this.zhankuang, "com5name");
this.com5name.text = '虚位以待';
this.com1jifen = FGUtil.getTextField(this.zhankuang, "com1jifen");
this.com1jifen.text = '0';
this.com2jifen = FGUtil.getTextField(this.zhankuang, "com2jifen");
this.com2jifen.text = '0';
this.com3jifen = FGUtil.getTextField(this.zhankuang, "com3jifen");
this.com3jifen.text = '0';
this.com4jifen = FGUtil.getTextField(this.zhankuang, "com4jifen");
this.com4jifen.text = '0';
this.com5jifen = FGUtil.getTextField(this.zhankuang, "com5jifen");
this.com5jifen.text = '0';
this.com1btn = FGUtil.getButton(this.zhankuang, "com1btn");
this.com2btn = FGUtil.getButton(this.zhankuang, "com2btn");
this.com3btn = FGUtil.getButton(this.zhankuang, "com3btn");
this.com4btn = FGUtil.getButton(this.zhankuang, "com4btn");
this.com5btn = FGUtil.getButton(this.zhankuang, "com5btn");
// FGUtil.getButton(this.jiangli, "com1btn");
this.jinMAPBTN = FGUtil.getButton(this.zhankuang, "jinMAPBTN");
this.jinMAPBTN.onClick(this.entrMap, this);
FGUtil.getButton(this.alrt, "JiangLiBtn").onClick(() => {
this.initshop(false, null);
}, this);
//請求排行榜數據
GameModel.send("c2s_ask_TianTi_info", {
type: 1,
genre: 0
})
}
// 傳送到指定打架地圖
entrMap() {
let mapId = 4006;
console.log('跳轉地圖' + mapId)
let comMapLogic = cc.find('Canvas/MapUI').getComponent('GameMapLogic');
comMapLogic.changeMap(mapId);
this.unscheduleAllCallbacks()
FGUtil.dispose(this.ManiPanel)
}
// 只刷新次數顯示
Refreshpandel(data) {
this.shengchang.text = `${data.shengchang}`;
/**敗場 */
this.baichang.text = `${data.baichang}`;
/**積分 */
this.jifen.text = `${data.selfjifen}`;
/**排名 */
this.paiming.text = `${data.selfpaiming}`;
this.tiantijifen.text = `當前擁有真實積分:${data.tiantijizhenshifen}`;
this.shijian.text = `本賽季結束時間每月最後一天23時59分50秒`;
let list = SKDataUtil.jsonBy(data.list);
for (const key in list) {
if (Object.prototype.hasOwnProperty.call(list, key)) {
const element = list[key];
console.log(key)
switch (Number(key)) {
case 0:
this.addUIRole(this.com1.node, element.resid, element.wingId, element.effid);
this.com1name.text = element.name;
this.com1jifen.text = `${element.jifen}`;
break;
case 1:
this.addUIRole(this.com2.node, element.resid, element.wingId, element.effid);
this.com2name.text = element.name;
this.com2jifen.text = `${element.jifen}`;
break;
case 2:
this.addUIRole(this.com3.node, element.resid, element.wingId, element.effid);
this.com3name.text = element.name;
this.com3jifen.text = `${element.jifen}`;
break;
case 3:
this.addUIRole(this.com4.node, element.resid, element.wingId, element.effid);
this.com4name.text = element.name;
this.com4jifen.text = `${element.jifen}`;
break;
case 4:
this.addUIRole(this.com5.node, element.resid, element.wingId, element.effid);
this.com5name.text = element.name;
this.com5jifen.text = `${element.jifen}`;
break;
}
}
}
}
//點擊兌換獎勵
onClickDuiHuan() {
if (this.jiangliList.selectedIndex < 0) { MsgAlert.addMsg('請選擇需要兌換的物品') }
let Cell = this.jiangliList.getChildAt(this.jiangliList.selectedIndex);
let data = Cell.node["data"];
console.log(`點擊兌換獎勵:` + data.name + `積分:` + GameModel.player.tianti_integral + '價格:' + data.price)
if (GameModel.player.tianti_integral >= data.price) {
GameModel.send('c2s_TianTi_buy', {
roleid: GameModel.player.roleid,
selfjifen: GameModel.player.tianti_integral,
itemid: data.itemid,
price: data.price,
name: data.name,
})
GameModel.player.tianti_integral -= data.price;
this.tiantijifen.text = `當前擁有真實積分:${GameModel.player.tianti_integral}`;
} else (
MsgAlert.addMsg(`你的天梯積分不足以兌換${data.name}`)
)
}
initshop(refresh: boolean = false, data: any = null) {
// 刷新顯示數據
if (refresh) {
if (data == null) {
console.warn("天梯獎勵數據錯誤")
return
}
this.jiangliList.removeChildrenToPool(); //移除列表
let list = SKDataUtil.jsonBy(data.jiangli);
for (const key in list) {
if (Object.prototype.hasOwnProperty.call(list, key)) {
const element = list[key];
if (element.name) {
let item = ItemUtil.getItemData(element.itemid);
let cell: fgui.GComponent;
cell = this.jiangliList.addItemFromPool().asCom;
FGUtil.getLoader(cell, "icon").url = `ui://main_ui/${item.icon}`;
FGUtil.getTextField(cell, "title").text = `${element.name}`;
FGUtil.getTextField(cell, "price").text = `${element.price}`;
FGUtil.getTextField(cell, "des").text = `${element.des}`;
cell.node["data"] = element;
}
}
}
this.jiangliList.selectedIndex = 0;
return;
}
//請求獎勵數據
GameModel.send("c2s_ask_TianTijiangli_info", { roleid: GameModel.player.roleid })
}
/**
* 添加人物UI
*/
addUIRole(pNode, resid, wingId, effid) {
if (!pNode) return;
// var childs=pNode.node.childNodes;
// for(var i=childs.length-1;i>=0;i--){
// pNode.node.removeChild(childs.item(i));
if (this.prefabObject["UIRole"] == null) {
cc.loader.loadRes("Prefabs/UIRole", cc.Prefab, (err, prefab) => {
if (err)
console.warn(err);
else {
this.prefabObject["UIRole"] = prefab;
this.addUIRole(pNode, resid, wingId, effid)
}
})
return
}
var roleNode: cc.Node = cc.instantiate(this.prefabObject["UIRole"]);
roleNode.parent = pNode;
roleNode.setPosition(0, 55)
// var info = ItemUtil.getItemData(id).json
// if (!info) {
// console.warn("寵物信息錯誤寵物id" + id)
// return
// }
// var key = JSON.parse(info).petid;
// if (SKDataUtil.hasProperty(GameModel.conf_role, resid)) {
// let resid = GameModel.conf_role[resid].resid;
roleNode.getComponent("UIRole").setInfo({
resid: resid,
name: '',
petcolor: 0,
wingId: SKDataUtil.findByDict(GameModel.game_conf.wing, "resid", wingId, "id", 0),
bodyEffectId: effid
})
roleNode.getComponent("UIRole").offTouchRole();
// }
}
openWinPanel(data) {
if (!this.battleWinPanel || (this.battleWinPanel && !this.battleWinPanel.node && !SKUIUtil.isValid(this.battleWinPanel.node))) {
this.battleWinPanel = FGUtil.create("main_ui", "crosspk_war_win_panel");
FGUtil.root().addChild(this.battleWinPanel);
this.battleWinPanel.makeFullScreen();
}
FGUtil.getRichTextField(this.battleWinPanel, "alert/n15").text = `${data.exp}`;
FGUtil.getRichTextField(this.battleWinPanel, "alert/n17").text = `${data.petExp}`;
FGUtil.getRichTextField(this.battleWinPanel, "alert/n19").text = `${data.score}`;
var icon = ItemUtil.getItemData(data.icon).icon;
FGUtil.getLoader(this.battleWinPanel, "alert/item/icon").url = `ui://main_ui/${icon}`;
let closeBtn = FGUtil.getComponent(this.battleWinPanel, "alert/mask")
let mask = FGUtil.getComponent(this.battleWinPanel, "mask")
this.pushCloseEvent(closeBtn, this.battleWinPanel);
this.pushCloseEvent(mask, this.battleWinPanel);
this.scheduleOnce(() => {
if (this.battleWinPanel && this.battleWinPanel.node) {
FGUtil.dispose(this.battleWinPanel);
}
}, 3)
}
openLosePanel(data) {
if (!this.battleLosePanel || (this.battleLosePanel && !this.battleLosePanel.node && !SKUIUtil.isValid(this.battleLosePanel.node))) {
this.battleLosePanel = FGUtil.create("main_ui", "crosspk_war_lose_panel");
FGUtil.root().addChild(this.battleLosePanel);
this.battleLosePanel.makeFullScreen();
}
FGUtil.getRichTextField(this.battleLosePanel, "alert/n15").text = `${data.exp}`;
FGUtil.getRichTextField(this.battleLosePanel, "alert/n17").text = `${data.petExp}`;
FGUtil.getRichTextField(this.battleLosePanel, "alert/n19").text = `${data.score}`;
var icon = ItemUtil.getItemData(data.icon).icon;
FGUtil.getLoader(this.battleLosePanel, "alert/item/icon").url = `ui://main_ui/${icon}`;
let closeBtn = FGUtil.getComponent(this.battleLosePanel, "alert/mask")
let mask = FGUtil.getComponent(this.battleLosePanel, "mask")
this.pushCloseEvent(closeBtn, this.battleLosePanel);
this.pushCloseEvent(mask, this.battleLosePanel);
this.scheduleOnce(() => {
if (this.battleLosePanel && this.battleLosePanel.node) {
FGUtil.dispose(this.battleLosePanel);
}
}, 3)
}
setScore(matchScore, satScore, peakScore, type) {
if (!SKUIUtil.isFGUIValid(this.ManiPanel)) return;
}
/**
* 添加關閉事件
*/
pushCloseEvent(item: fairygui.GComponent, target: fairygui.GComponent, call: Function = null) {
item.clearClick();
item.onClick(() => {
if (this.stopTap) return
call && call();
FGUtil.dispose(target);
}, this)
}
}