491 lines
17 KiB
TypeScript
491 lines
17 KiB
TypeScript
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)
|
||
}
|
||
} |