679 lines
22 KiB
TypeScript
679 lines
22 KiB
TypeScript
|
import GameModel from "../core/GameModel";
|
|||
|
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 TurnTable extends cc.Component {
|
|||
|
|
|||
|
/**
|
|||
|
* 轉盤單例實例
|
|||
|
*/
|
|||
|
public static Instance: TurnTable = null;
|
|||
|
|
|||
|
/**
|
|||
|
* 轉盤面板
|
|||
|
*/
|
|||
|
turnTablePanel: fgui.GComponent = null;
|
|||
|
|
|||
|
/**
|
|||
|
* 免費次數
|
|||
|
*/
|
|||
|
freeTimes: number = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 寶箱數量
|
|||
|
*/
|
|||
|
boxNum: number = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 轉動次數
|
|||
|
*/
|
|||
|
turnTimes: number = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 阻止點擊
|
|||
|
*/
|
|||
|
stopTap: boolean = false;
|
|||
|
|
|||
|
/**
|
|||
|
* 是否顯示動畫
|
|||
|
*/
|
|||
|
showAct: boolean = false;
|
|||
|
|
|||
|
/**
|
|||
|
* 風雨寶箱數據
|
|||
|
*/
|
|||
|
boxData: any = null;
|
|||
|
|
|||
|
/**
|
|||
|
* 花費類型 0 風雨寶箱 1免費 2單次 3五連抽
|
|||
|
*/
|
|||
|
coastType: number = -1;
|
|||
|
|
|||
|
/**
|
|||
|
* 轉盤1次價格
|
|||
|
*/
|
|||
|
turn1Price: number = 99999;
|
|||
|
|
|||
|
/**
|
|||
|
* 轉盤5次價格
|
|||
|
*/
|
|||
|
turn5Price: number = 99999;
|
|||
|
/**
|
|||
|
* 模式
|
|||
|
*/
|
|||
|
mode: number = 0;
|
|||
|
/**
|
|||
|
* 要掉落的獎品id
|
|||
|
*/
|
|||
|
dorpId: number = -1;
|
|||
|
/**
|
|||
|
* 發送獲獎物品鍵值
|
|||
|
*/
|
|||
|
dorpKey: number = -1;
|
|||
|
/**
|
|||
|
* 需要加載的預製體
|
|||
|
*/
|
|||
|
prefabObject: any = {};
|
|||
|
|
|||
|
onLoad() {
|
|||
|
console.log("===============================", this.node.name)
|
|||
|
if (TurnTable.Instance === null) {
|
|||
|
TurnTable.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;
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 打開轉盤
|
|||
|
*/
|
|||
|
openTurnTable(refresh: boolean = false, data: any = null) {
|
|||
|
if (!this.turnTablePanel || (this.turnTablePanel && !this.turnTablePanel.node && !SKUIUtil.isValid(this.turnTablePanel.node))) {
|
|||
|
this.turnTablePanel = FGUtil.create("main_ui", "turntable2_panel");
|
|||
|
FGUtil.root().addChild(this.turnTablePanel);
|
|||
|
this.turnTablePanel.makeFullScreen();
|
|||
|
}
|
|||
|
|
|||
|
// 刷新顯示數據
|
|||
|
if (refresh) {
|
|||
|
if (data == null) {
|
|||
|
console.warn("抽獎數據錯誤")
|
|||
|
return
|
|||
|
}
|
|||
|
this.mode = data.model;
|
|||
|
// 刷新免費抽獎次數和寶箱鑰匙數量
|
|||
|
this.onlyRefreshTimes(data)
|
|||
|
|
|||
|
if (data.type == 1) {
|
|||
|
// 風雨寶箱
|
|||
|
this.showBoxContent(JSON.parse(data.dialData))
|
|||
|
}
|
|||
|
if (data.type == 2) {
|
|||
|
// 轉盤
|
|||
|
if (this.turnTimes > 0) {
|
|||
|
var target = this.calcTarget(JSON.parse(data.dialData), 8)
|
|||
|
this.showTurnTableContent(JSON.parse(data.dialData), target)
|
|||
|
this.turnTimes--;
|
|||
|
this.runTurn(target);
|
|||
|
}
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 跳過動畫按鈕
|
|||
|
let skipBtn = FGUtil.getButton(this.turnTablePanel, "alert/skip");
|
|||
|
FGUtil.getControl(skipBtn, "selected").selectedIndex = 1;
|
|||
|
skipBtn.onClick(this.changeShowAct, this)
|
|||
|
|
|||
|
// 關閉按鈕
|
|||
|
let closeBtn = FGUtil.getButton(this.turnTablePanel, "alert/close")
|
|||
|
this.pushCloseEvent(closeBtn, this.turnTablePanel, () => { this.unscheduleAllCallbacks() });
|
|||
|
|
|||
|
// 轉一次
|
|||
|
let turn1Btn = FGUtil.getButton(this.turnTablePanel, "alert/turn1");
|
|||
|
turn1Btn.onClick(this.turn1Times, this);
|
|||
|
if (this.freeTimes > 0) turn1Btn.visible = false;
|
|||
|
|
|||
|
// 轉五次
|
|||
|
let turn5Btn = FGUtil.getButton(this.turnTablePanel, "alert/turn5");
|
|||
|
turn5Btn.onClick(this.turn5Times, this);
|
|||
|
|
|||
|
// 免費轉一次
|
|||
|
let turn1FreeBtn = FGUtil.getButton(this.turnTablePanel, "alert/free1");
|
|||
|
turn1FreeBtn.onClick(this.turn1TimesFree, this);
|
|||
|
if (this.freeTimes <= 0) turn1FreeBtn.visible = false;
|
|||
|
|
|||
|
// 轉一次mode2
|
|||
|
let turn1mode2Btn = FGUtil.getButton(this.turnTablePanel, "alert/turn1mode2");
|
|||
|
turn1mode2Btn.onClick(this.turn1Times, this);
|
|||
|
|
|||
|
// 轉五次mode2
|
|||
|
let turn5mode2Btn = FGUtil.getButton(this.turnTablePanel, "alert/turn5mode2");
|
|||
|
turn5mode2Btn.onClick(this.turn5Times, this);
|
|||
|
|
|||
|
// 開啟風雨寶箱
|
|||
|
let openBoxBtn = FGUtil.getButton(this.turnTablePanel, "alert/openbox");
|
|||
|
openBoxBtn.onClick(this.openBox, this);
|
|||
|
|
|||
|
// 請求風雨寶箱數據
|
|||
|
GameModel.send("c2s_ask_dial_info", {
|
|||
|
type: 1,
|
|||
|
genre: 0
|
|||
|
})
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
// 只刷新次數顯示
|
|||
|
onlyRefreshTimes(data) {
|
|||
|
if (this.mode == 1) {
|
|||
|
data.one && (this.turn1Price = data.one);
|
|||
|
data.five && (this.turn5Price = data.five);
|
|||
|
} else {
|
|||
|
this.turn1Price = data.one;
|
|||
|
this.turn5Price = data.five;
|
|||
|
}
|
|||
|
// 刷新轉盤價格
|
|||
|
this.boxNum = data.dialBoxNum;
|
|||
|
if (this.mode == 1) {
|
|||
|
FGUtil.getControl(this.turnTablePanel, "alert/mode2").selectedIndex = 0;
|
|||
|
this.freeTimes = data.dialNum;
|
|||
|
let turn1Btn = FGUtil.getButton(this.turnTablePanel, "alert/turn1");
|
|||
|
let turn5Btn = FGUtil.getButton(this.turnTablePanel, "alert/turn5");
|
|||
|
let turn1FreeBtn = FGUtil.getButton(this.turnTablePanel, "alert/free1");
|
|||
|
FGUtil.getTextField(this.turnTablePanel, "alert/free1/count").text = `次數:${this.freeTimes}`;
|
|||
|
FGUtil.getTextField(this.turnTablePanel, "alert/openbox/count").text = `鑰匙:${this.boxNum}`;
|
|||
|
if (this.freeTimes > 0) {
|
|||
|
turn1Btn.visible = false;
|
|||
|
turn1FreeBtn.visible = true;
|
|||
|
} else {
|
|||
|
turn1Btn.visible = true;
|
|||
|
turn1FreeBtn.visible = false;
|
|||
|
}
|
|||
|
turn1Btn.title = `轉一次[img]ui://main_ui/9004[/img][size=24]${this.turn1Price}[size=10]`;
|
|||
|
turn5Btn.title = `轉五次[img]ui://main_ui/9004[/img][size=24]${this.turn5Price}[size=10]`;
|
|||
|
} else {
|
|||
|
FGUtil.getControl(this.turnTablePanel, "alert/mode2").selectedIndex = 1;
|
|||
|
let turn1Btn = FGUtil.getButton(this.turnTablePanel, "alert/turn1mode2");
|
|||
|
let turn5Btn = FGUtil.getButton(this.turnTablePanel, "alert/turn5mode2");
|
|||
|
turn1Btn.title = `轉一次[img]ui://main_ui/50019[/img][size=24]X1`;
|
|||
|
turn5Btn.title = `轉五次[img]ui://main_ui/50019[/img][size=24]X5`;
|
|||
|
FGUtil.getTextField(turn1Btn, "count").text = "鑰匙:" + this.turn1Price.toString();
|
|||
|
FGUtil.getTextField(turn5Btn, "count").text = "鑰匙:" + this.turn5Price.toString();
|
|||
|
FGUtil.getTextField(this.turnTablePanel, "alert/openbox/count").text = `鑰匙:${this.boxNum}`;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// 風雨值
|
|||
|
FGUtil.getTextField(this.turnTablePanel, "alert/turntable/value").text = `${data.dialCount}/150`;
|
|||
|
}
|
|||
|
|
|||
|
// 切換動畫開關
|
|||
|
changeShowAct() {
|
|||
|
if (this.stopTap) {
|
|||
|
MsgAlert.addMsg("請稍後再試")
|
|||
|
return
|
|||
|
}
|
|||
|
this.showAct = !this.showAct;
|
|||
|
let skipBtn = FGUtil.getButton(this.turnTablePanel, "alert/skip");
|
|||
|
FGUtil.getControl(skipBtn, "selected").selectedIndex = this.showAct ? 0 : 1;
|
|||
|
}
|
|||
|
|
|||
|
// 顯示風雨寶箱獎勵
|
|||
|
showBoxContent(data) {
|
|||
|
this.boxData = data;
|
|||
|
let prizeContent = FGUtil.getComponent(this.turnTablePanel, "alert/content");
|
|||
|
var index = 0;
|
|||
|
for (let key in data) {
|
|||
|
var info = data[key]
|
|||
|
if (info.type == 0) {
|
|||
|
// 道具
|
|||
|
let item = FGUtil.create("main_ui", "prize3");
|
|||
|
FGUtil.getTextField(item, "name").text = info.itemName;
|
|||
|
FGUtil.getTextField(item, "num").text = info.num;
|
|||
|
var icon = ItemUtil.getItemData(info.itemId).icon
|
|||
|
FGUtil.getLoader(item, "icon").url = `ui://main_ui/${icon}`
|
|||
|
item.setPosition(index % 2 == 0 ? 40 : 200, 285 + Math.floor(index / 2 - 1) * 125)
|
|||
|
item.name = `n${index}`
|
|||
|
prizeContent.addChild(item)
|
|||
|
}
|
|||
|
if (info.type == 1) {
|
|||
|
// 寵物
|
|||
|
let item = FGUtil.create("main_ui", "prize1");
|
|||
|
FGUtil.getTextField(item, "name").text = info.itemName;
|
|||
|
item.setPosition(index % 2 == 0 ? 30 : 190, 100 + Math.floor(index / 2) * 160)
|
|||
|
this.addUIRole(FGUtil.getComponent(item, "role").node, info.itemId)
|
|||
|
item.name = `n${index}`
|
|||
|
prizeContent.asCom.addChild(item)
|
|||
|
}
|
|||
|
index++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 顯示轉盤獎品
|
|||
|
showTurnTableContent(data, target) {
|
|||
|
var arr = [0, 1, 2, 3, 4, 5, 6, 7]
|
|||
|
let prizeContent = FGUtil.getComponent(this.turnTablePanel, "alert/turntable");
|
|||
|
let index = 0;
|
|||
|
arr.splice(target, 1)
|
|||
|
for (let key in data) {
|
|||
|
var r = -1
|
|||
|
if (index != target)
|
|||
|
r = Math.floor(Math.random() * arr.length);
|
|||
|
|
|||
|
let info = data[key];
|
|||
|
let itemData = ItemUtil.getItemData(info.itemId);
|
|||
|
let item;
|
|||
|
if (index != target) {
|
|||
|
item = FGUtil.getButton(prizeContent, `b${arr[r]}`);
|
|||
|
arr.splice(r, 1)
|
|||
|
} else
|
|||
|
item = FGUtil.getButton(prizeContent, `b${target}`);
|
|||
|
item.icon = `ui://main_ui/${itemData.icon}`;
|
|||
|
item.title = info.num;
|
|||
|
index++;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 添加人物UI
|
|||
|
*/
|
|||
|
addUIRole(pNode, id) {
|
|||
|
if (!pNode) return;
|
|||
|
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, id)
|
|||
|
}
|
|||
|
})
|
|||
|
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_pet, key)) {
|
|||
|
let resid = GameModel.conf_pet[key].resid;
|
|||
|
roleNode.getComponent("UIRole").setInfo({
|
|||
|
resid: resid,
|
|||
|
name: '',
|
|||
|
petcolor: 0
|
|||
|
})
|
|||
|
roleNode.getComponent("UIRole").offTouchRole();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
calcTarget(data, max) {
|
|||
|
var count = 0, rand = 0, idx = 0;
|
|||
|
for (let key in data) {
|
|||
|
count += data[key].rate;
|
|||
|
}
|
|||
|
rand = Math.random() * count;
|
|||
|
count = 0;
|
|||
|
for (let key in data) {
|
|||
|
count += data[key].rate
|
|||
|
if (rand < count) {
|
|||
|
this.dorpId = data[key].itemId
|
|||
|
this.dorpKey = parseInt(key);
|
|||
|
return idx;
|
|||
|
}
|
|||
|
idx++;
|
|||
|
}
|
|||
|
// 以防上面出錯
|
|||
|
console.error("概率出錯")
|
|||
|
// 防止因程序錯誤抽到前兩個珍貴物品
|
|||
|
var r = Math.floor(Math.random() * (max - 2)) + 2;
|
|||
|
this.dorpId = data[r].itemId
|
|||
|
this.dorpKey = r;
|
|||
|
return r
|
|||
|
}
|
|||
|
|
|||
|
// 轉1次
|
|||
|
turn1Times() {
|
|||
|
if (this.stopTap) {
|
|||
|
MsgAlert.addMsg("請稍後再試")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if (this.mode == 1 && GameModel.player.gameData.jade < this.turn1Price) {
|
|||
|
MsgAlert.addMsg("仙玉不足")
|
|||
|
return
|
|||
|
}
|
|||
|
if (this.mode == 2 && this.turn1Price < 1) {
|
|||
|
MsgAlert.addMsg("道具不足")
|
|||
|
return
|
|||
|
}
|
|||
|
this.turnTimes = 1;
|
|||
|
this.coastType = 2;
|
|||
|
this.stopTap = true;
|
|||
|
this.sendTurnTableData()
|
|||
|
}
|
|||
|
// 轉5次
|
|||
|
turn5Times() {
|
|||
|
if (this.stopTap) {
|
|||
|
MsgAlert.addMsg("請稍後再試")
|
|||
|
return
|
|||
|
}
|
|||
|
if (this.mode == 1 && GameModel.player.gameData.jade < this.turn5Price) {
|
|||
|
MsgAlert.addMsg("仙玉不足")
|
|||
|
return
|
|||
|
}
|
|||
|
if (this.mode == 2 && this.turn5Price < 5) {
|
|||
|
MsgAlert.addMsg("道具不足")
|
|||
|
return
|
|||
|
}
|
|||
|
this.turnTimes = 5;
|
|||
|
this.coastType = 3;
|
|||
|
this.stopTap = true;
|
|||
|
this.sendTurnTableData()
|
|||
|
}
|
|||
|
// 免費轉1次
|
|||
|
turn1TimesFree() {
|
|||
|
if (this.stopTap) {
|
|||
|
MsgAlert.addMsg("請稍後再試")
|
|||
|
return
|
|||
|
}
|
|||
|
if (this.freeTimes <= 0) {
|
|||
|
MsgAlert.addMsg("沒有免費抽獎次數")
|
|||
|
return
|
|||
|
}
|
|||
|
this.turnTimes = 1;
|
|||
|
this.coastType = 1;
|
|||
|
this.stopTap = true;
|
|||
|
this.sendTurnTableData()
|
|||
|
}
|
|||
|
// 風雨寶箱
|
|||
|
openBox() {
|
|||
|
if (this.stopTap) {
|
|||
|
MsgAlert.addMsg("請稍後再試")
|
|||
|
return
|
|||
|
}
|
|||
|
if (this.boxNum <= 0) {
|
|||
|
MsgAlert.addMsg("沒有風雨寶箱鑰匙")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 刷新免費抽獎次數和寶箱鑰匙數量
|
|||
|
this.boxNum--;
|
|||
|
FGUtil.getTextField(this.turnTablePanel, "alert/openbox/count").text = `鑰匙:${this.boxNum}`;
|
|||
|
this.runTurnByBox(this.calcTarget(this.boxData, 6))
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
sendTurnTableData() {
|
|||
|
// 請求轉盤數據
|
|||
|
GameModel.send("c2s_ask_dial_info", {
|
|||
|
type: 2,
|
|||
|
genre: this.coastType
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
runTurn(idx) {
|
|||
|
var fastNums = 3 + Math.floor(Math.random() * 6);
|
|||
|
var target = idx;
|
|||
|
if (!this.showAct) {
|
|||
|
let table = FGUtil.getComponent(this.turnTablePanel, "alert/turntable");
|
|||
|
// 全部隱藏
|
|||
|
for (let n = 0; n < 8; n++) {
|
|||
|
FGUtil.getComponent(table, `n${n}`).visible = false;
|
|||
|
let item = FGUtil.getComponent(table, `b${n}`)
|
|||
|
FGUtil.getControl(item, "get").selectedIndex = 0;
|
|||
|
FGUtil.getControl(item, "light").selectedIndex = 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
FGUtil.getControl(table, `b${target}/get`).selectedIndex = 1;
|
|||
|
FGUtil.getControl(table, `b${target}/light`).selectedIndex = 0;
|
|||
|
GameModel.send("c2s_dial_go", {
|
|||
|
id: this.dorpKey,
|
|||
|
type: 2
|
|||
|
})
|
|||
|
this.dorpKey = - 1
|
|||
|
|
|||
|
if (this.turnTimes > 0) {
|
|||
|
this.scheduleOnce(() => {
|
|||
|
this.sendTurnTableData()
|
|||
|
}, 0.3)
|
|||
|
} else {
|
|||
|
this.scheduleOnce(() => {
|
|||
|
this.coastType = -1;
|
|||
|
this.stopTap = false
|
|||
|
}, 0.2)
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
var lowNums = target - fastNums % 8 + 9;
|
|||
|
var temp = 0;
|
|||
|
if (lowNums > 4) {
|
|||
|
temp = lowNums - 4;
|
|||
|
lowNums -= temp;
|
|||
|
fastNums += temp;
|
|||
|
}
|
|||
|
if (lowNums < 2) {
|
|||
|
temp = 2 - lowNums;
|
|||
|
lowNums += temp;
|
|||
|
fastNums -= temp;
|
|||
|
}
|
|||
|
if (fastNums > 8) {
|
|||
|
fastNums -= 8
|
|||
|
}
|
|||
|
if (fastNums > 8) {
|
|||
|
fastNums -= 8
|
|||
|
}
|
|||
|
let count = fastNums + lowNums;
|
|||
|
|
|||
|
let fastSpeed = 0.02
|
|||
|
let lowAdd = 0.1 / lowNums;
|
|||
|
let lowSpeed = 0.02 + lowAdd;
|
|||
|
let time = 0;
|
|||
|
let table = FGUtil.getComponent(this.turnTablePanel, "alert/turntable");
|
|||
|
// 全部隱藏
|
|||
|
for (let n = 0; n < 8; n++) {
|
|||
|
FGUtil.getComponent(table, `n${n}`).visible = false;
|
|||
|
let item = FGUtil.getComponent(table, `b${n}`)
|
|||
|
FGUtil.getControl(item, "get").selectedIndex = 0;
|
|||
|
FGUtil.getControl(item, "light").selectedIndex = 0;
|
|||
|
}
|
|||
|
for (let i = 0; i < count; i++) {
|
|||
|
if (i < fastNums)
|
|||
|
time += fastSpeed
|
|||
|
else {
|
|||
|
time += lowSpeed
|
|||
|
lowSpeed += lowAdd
|
|||
|
}
|
|||
|
this.scheduleOnce(() => {
|
|||
|
FGUtil.getComponent(table, `n${(i + 7) % 8}`).visible = false;
|
|||
|
FGUtil.getControl(table, `b${(i + 7) % 8}/light`).selectedIndex = 0;
|
|||
|
|
|||
|
FGUtil.getComponent(table, `n${i % 8}`).visible = true
|
|||
|
FGUtil.getControl(table, `b${i % 8}/light`).selectedIndex = 1
|
|||
|
|
|||
|
// 最終請求發放道具
|
|||
|
if (i + 1 == count) {
|
|||
|
FGUtil.getControl(table, `b${i % 8}/get`).selectedIndex = 1;
|
|||
|
FGUtil.getControl(table, `b${i % 8}/light`).selectedIndex = 0;
|
|||
|
GameModel.send("c2s_dial_go", {
|
|||
|
id: this.dorpKey,
|
|||
|
type: 2
|
|||
|
})
|
|||
|
this.dorpKey = - 1
|
|||
|
}
|
|||
|
}, time)
|
|||
|
|
|||
|
}
|
|||
|
if (this.turnTimes > 0) {
|
|||
|
this.scheduleOnce(() => {
|
|||
|
this.sendTurnTableData()
|
|||
|
}, time + 1)
|
|||
|
} else {
|
|||
|
this.scheduleOnce(() => {
|
|||
|
this.coastType = -1;
|
|||
|
this.stopTap = false
|
|||
|
}, time + 0.2)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
runTurnByBox(idx) {
|
|||
|
let box = FGUtil.getComponent(this.turnTablePanel, "prize_box")
|
|||
|
let mask2 = FGUtil.getComponent(this.turnTablePanel, "mask2")
|
|||
|
mask2.visible = true;
|
|||
|
mask2.clearClick()
|
|||
|
box.visible = true
|
|||
|
var fastNums = 10 + Math.floor(Math.random() * 6);
|
|||
|
var target = idx;
|
|||
|
var lowNums = target - fastNums % 6 + 7;
|
|||
|
var temp = 0;
|
|||
|
if (lowNums > 8) {
|
|||
|
temp = lowNums - 8;
|
|||
|
lowNums -= temp;
|
|||
|
fastNums += temp;
|
|||
|
}
|
|||
|
if (lowNums < 4) {
|
|||
|
temp = 4 - lowNums;
|
|||
|
lowNums += temp;
|
|||
|
fastNums -= temp;
|
|||
|
}
|
|||
|
let count = fastNums + lowNums;
|
|||
|
|
|||
|
let fastSpeed = 0.03
|
|||
|
let lowAdd = 0.2 / lowNums;
|
|||
|
let lowSpeed = 0.03 + lowAdd;
|
|||
|
let time = 0;
|
|||
|
|
|||
|
var maxChildeNum = 6;
|
|||
|
// 全部恢復正常並顯示數據
|
|||
|
for (let n = 0; n < maxChildeNum; n++) {
|
|||
|
let item = FGUtil.getComponent(box, `item_${n}`);
|
|||
|
FGUtil.getControl(item, "select").selectedIndex = 0;
|
|||
|
FGUtil.getComponent(item, "effect").visible = false;
|
|||
|
var icon = ItemUtil.getItemData(this.boxData[`${n}`].itemId).icon;
|
|||
|
FGUtil.getTextField(item, "title").text = this.boxData[`${n}`].num;
|
|||
|
FGUtil.getLoader(item, "icon").url = `ui://main_ui/${icon}`
|
|||
|
}
|
|||
|
for (let i = 0; i < count; i++) {
|
|||
|
if (i < fastNums)
|
|||
|
time += fastSpeed
|
|||
|
else {
|
|||
|
time += lowSpeed
|
|||
|
lowSpeed += lowAdd
|
|||
|
}
|
|||
|
this.scheduleOnce(() => {
|
|||
|
let item1 = FGUtil.getComponent(box, `item_${i % maxChildeNum}`);
|
|||
|
FGUtil.getControl(item1, "select").selectedIndex = 1;
|
|||
|
|
|||
|
let item2 = FGUtil.getComponent(box, `item_${(i + 5) % maxChildeNum}`);
|
|||
|
FGUtil.getControl(item2, "select").selectedIndex = 0;
|
|||
|
// 最終請求發放道具
|
|||
|
if (i + 1 == count) {
|
|||
|
FGUtil.getControl(item1, "select").selectedIndex = 0;
|
|||
|
let effect = FGUtil.getAnim(item1, `effect`);
|
|||
|
effect.visible = true;
|
|||
|
effect.playing = true;
|
|||
|
GameModel.send("c2s_dial_go", {
|
|||
|
id: target,
|
|||
|
type: 1
|
|||
|
})
|
|||
|
}
|
|||
|
}, time)
|
|||
|
|
|||
|
}
|
|||
|
this.scheduleOnce(() => {
|
|||
|
let mask2 = FGUtil.getComponent(this.turnTablePanel, "mask2")
|
|||
|
mask2.visible = true;
|
|||
|
mask2.clearClick()
|
|||
|
mask2.onClick(() => {
|
|||
|
// 全部恢復正常
|
|||
|
for (let n = 0; n < maxChildeNum; n++) {
|
|||
|
let box = FGUtil.getComponent(this.turnTablePanel, "prize_box")
|
|||
|
let item = FGUtil.getComponent(box, `item_${n}`);
|
|||
|
FGUtil.getControl(item, "select").selectedIndex = 0;
|
|||
|
let effect = FGUtil.getAnim(item, `effect`);
|
|||
|
effect.visible = false;
|
|||
|
effect.playing = false;
|
|||
|
this.stopTap = false
|
|||
|
box.visible = false
|
|||
|
mask2.visible = false;
|
|||
|
}
|
|||
|
}, this)
|
|||
|
}, time + 0.5)
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 掉落物品
|
|||
|
*/
|
|||
|
dropItemToBag() {
|
|||
|
if (this.dorpId == -1) return
|
|||
|
var t = cc.tween;
|
|||
|
var itemNode = new cc.Node("dropItem");
|
|||
|
itemNode.addComponent(cc.Sprite).spriteFrame;
|
|||
|
var data = ItemUtil.getItemData(this.dorpId);
|
|||
|
itemNode.getComponent(cc.Sprite).spriteFrame = ItemUtil.getItemIconBy(data);
|
|||
|
itemNode.getComponent(cc.Sprite).sizeMode = cc.Sprite.SizeMode.CUSTOM
|
|||
|
itemNode.width = 50;
|
|||
|
itemNode.height = 50;
|
|||
|
itemNode.setPosition(this.turnTablePanel.node.width / 2 + 120, -this.turnTablePanel.node.height + 80)
|
|||
|
itemNode.opacity = 0;
|
|||
|
itemNode.parent = this.turnTablePanel.node;
|
|||
|
|
|||
|
t(itemNode)
|
|||
|
.parallel(
|
|||
|
t().by(0.4, { y: 80 }),
|
|||
|
t().to(0.2, { opacity: 255 })
|
|||
|
)
|
|||
|
.delay(0.15)
|
|||
|
.call(() => {
|
|||
|
let bezerby = cc.bezierBy(0.5, [cc.v2(88, 10), cc.v2(130, 80), cc.v2(155, -350)]);
|
|||
|
itemNode.runAction(cc.sequence(cc.spawn(bezerby, cc.rotateBy(0.3, 90)), cc.removeSelf()));
|
|||
|
})
|
|||
|
.start()
|
|||
|
this.dorpId = -1;
|
|||
|
}
|
|||
|
/**
|
|||
|
* 添加關閉事件
|
|||
|
*/
|
|||
|
pushCloseEvent(item: fairygui.GComponent, target: fairygui.GComponent, call: Function = null) {
|
|||
|
item.clearClick();
|
|||
|
item.onClick(() => {
|
|||
|
if (this.stopTap) return
|
|||
|
call && call();
|
|||
|
FGUtil.dispose(target);
|
|||
|
}, this)
|
|||
|
}
|
|||
|
}
|