453 lines
16 KiB
TypeScript
453 lines
16 KiB
TypeScript
import GameModel from "../core/GameModel";
|
|
import ItemUtil from "../core/ItemUtil";
|
|
import MsgAlert from "../game/msg/MsgAlert";
|
|
import SkillUtil from "../game/skill/core/SkillUtil";
|
|
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;
|
|
|
|
@ccclass
|
|
export default class RechargeReward extends cc.Component {
|
|
|
|
/**
|
|
* 充值獎勵單例實例
|
|
*/
|
|
public static Instance: RechargeReward = null;
|
|
|
|
/**
|
|
* 充值獎勵面板
|
|
*/
|
|
rewardPanel: fgui.GComponent = null;
|
|
|
|
/**
|
|
* 需要加載的預製體
|
|
*/
|
|
prefabObject: any = {};
|
|
|
|
/**
|
|
* 是否正在領取獎勵
|
|
*/
|
|
isRewarding: Boolean = false;
|
|
|
|
/**
|
|
* 正在領取的獎勵列表
|
|
*/
|
|
rewardList: any = [];
|
|
|
|
/**
|
|
* 正在領取的是第幾個獎勵
|
|
*/
|
|
rewardIdx: number = -1;
|
|
/**
|
|
* 類型 面板1還是面板2
|
|
*/
|
|
panelType: number = 0;
|
|
|
|
onLoad() {
|
|
if (RechargeReward.Instance === null) {
|
|
RechargeReward.Instance = this;
|
|
this.loadPrefab();
|
|
} else {
|
|
this.destroy();
|
|
return;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 加載預製體
|
|
*/
|
|
loadPrefab() {
|
|
// 加載所需的預製體
|
|
var prefabList = [
|
|
{ url: "Prefabs/BagItemDetail", name: "BagItemDetail" },
|
|
{ url: "Prefabs/dragonBones", name: "dragonBones" },
|
|
]
|
|
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;
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
openRewardPanel(refresh: Boolean = false) {
|
|
if (!this.rewardPanel || (this.rewardPanel && !this.rewardPanel.node && !SKUIUtil.isValid(this.rewardPanel.node))) {
|
|
this.rewardPanel = FGUtil.create("main_ui", "rechargeRewardPanel");
|
|
FGUtil.root().addChild(this.rewardPanel);
|
|
this.rewardPanel.makeFullScreen();
|
|
}
|
|
this.panelType = 1;
|
|
this.initRewardList();
|
|
// let charge = GameModel.conf_charge["1"];
|
|
FGUtil.getTextField(this.rewardPanel, "alert/count").text = String(GameModel.player.chargesum);
|
|
var mask = FGUtil.getComponent(this.rewardPanel, "mask");
|
|
var close = FGUtil.getButton(this.rewardPanel, "alert/n10");
|
|
this.pushCloseEvent(mask, this.rewardPanel);
|
|
this.pushCloseEvent(close, this.rewardPanel);
|
|
}
|
|
|
|
/**
|
|
* 添加關閉事件
|
|
*/
|
|
pushCloseEvent(item: fairygui.GComponent, target: fairygui.GComponent, call: Function = null) {
|
|
item.clearClick();
|
|
item.onClick(() => {
|
|
call && call()
|
|
this.panelType = -0;
|
|
this.unscheduleAllCallbacks();
|
|
FGUtil.dispose(target);
|
|
}, this)
|
|
}
|
|
|
|
/**
|
|
* 初始化獎勵列表
|
|
*/
|
|
initRewardList() {
|
|
let reward_list = GameModel.conf_charge_reward;
|
|
let list = [];
|
|
for (let i = 1; reward_list[i]; ++i) {
|
|
let item = reward_list[i];
|
|
list.push(item);
|
|
}
|
|
list.sort((a, b) => {
|
|
return a.money - b.money;
|
|
});
|
|
|
|
this.fillAmout(GameModel.player.chargesum)
|
|
let rewardList = FGUtil.getComponent(this.rewardPanel, "alert/n49")
|
|
var rewalrdLevel = [0, 0, 1, 1, 1, 1, 1, 2, 2]
|
|
for (let i = 0; i < list.length; i++) {
|
|
let rewardItem = FGUtil.getComponent(rewardList, `n${i}`);
|
|
rewardItem.clearClick();
|
|
rewardItem.onClick(() => {
|
|
if (this.isRewarding) {
|
|
MsgAlert.addMsg("您點擊太快了")
|
|
return
|
|
}
|
|
let arr = [];
|
|
arr[0] = list[i].gid1;
|
|
if (list[i].gid2)
|
|
arr[1] = list[i].gid2;
|
|
this.rewardList = arr;
|
|
this.isRewarding = true;
|
|
this.rewardIdx = i;
|
|
GameModel.send('c2s_charge_reward', { rewardid: i + 1 });
|
|
})
|
|
FGUtil.getTextField(rewardItem, "num").text = list[i].money;
|
|
rewardItem.getController("level").selectedIndex = rewalrdLevel[i];
|
|
var rewardsNum = list[i].gid2 ? 2 : 1;
|
|
if (rewardsNum == 1) {
|
|
rewardItem.getController("oneReward").selectedIndex = 1;
|
|
let data = ItemUtil.getItemData(list[i].gid1);
|
|
FGUtil.getLoader(rewardItem, "reward1").texture = ItemUtil.getItemIconBy(data);
|
|
FGUtil.getTextField(rewardItem, "reward1Count").text = SKDataUtil.transform(list[i].count1);
|
|
var r1 = FGUtil.getComponent(rewardItem, "reward1")
|
|
r1.clearClick();
|
|
r1.onClick((eve) => {
|
|
eve.stopPropagation()
|
|
this.showInfo(data)
|
|
})
|
|
|
|
} else {
|
|
let data1 = ItemUtil.getItemData(list[i].gid1);
|
|
FGUtil.getLoader(rewardItem, "reward1").texture = ItemUtil.getItemIconBy(data1);
|
|
FGUtil.getTextField(rewardItem, "reward1Count").text = SKDataUtil.transform(list[i].count1);
|
|
var r1 = FGUtil.getComponent(rewardItem, "reward1")
|
|
r1.clearClick();
|
|
r1.onClick((eve) => {
|
|
eve.stopPropagation()
|
|
this.showInfo(data1)
|
|
})
|
|
let data2 = ItemUtil.getItemData(list[i].gid2);
|
|
FGUtil.getLoader(rewardItem, "reward2").texture = ItemUtil.getItemIconBy(data2);
|
|
FGUtil.getTextField(rewardItem, "reward2Count").text = SKDataUtil.transform(list[i].count2);
|
|
var r2 = FGUtil.getComponent(rewardItem, "reward2")
|
|
r2.clearClick();
|
|
r2.onClick((eve) => {
|
|
eve.stopPropagation()
|
|
this.showInfo(data2)
|
|
})
|
|
}
|
|
let has_gain = ((GameModel.player.rewardrecord & (1 << (i))) > 0);
|
|
FGUtil.getControl(rewardItem, "check").selectedIndex = has_gain ? 1 : 0;
|
|
}
|
|
}
|
|
|
|
showInfo(itemInfo) {
|
|
if (itemInfo != null && this.prefabObject["BagItemDetail"] != null) {
|
|
let detail = cc.instantiate(this.prefabObject["BagItemDetail"]);
|
|
detail.parent = this.rewardPanel.node;
|
|
detail.setPosition(this.rewardPanel.node.width / 2, -this.rewardPanel.node.height / 2)
|
|
detail.name = 'BagItemDetail';
|
|
detail.getComponent('BagItemDetail').loadInfo(itemInfo);
|
|
}
|
|
}
|
|
|
|
dropItemsToBag() {
|
|
this.isRewarding = false;
|
|
let timeWait = 0
|
|
if (this.rewardList.length == 0) return
|
|
FGUtil.getControl(this.rewardPanel, `alert/n49/n${this.rewardIdx}/check`).selectedIndex = 1;
|
|
for (let i in this.rewardList) {
|
|
this.scheduleOnce(() => { this.dropItemToBag(this.rewardList[i]) }, timeWait)
|
|
timeWait += 0.4
|
|
}
|
|
}
|
|
dropItemToBag(id) {
|
|
var t = cc.tween;
|
|
var itemNode = new cc.Node("dropItem");
|
|
itemNode.addComponent(cc.Sprite).spriteFrame;
|
|
var data = ItemUtil.getItemData(id);
|
|
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.rewardPanel.node.width / 2 + 120, -this.rewardPanel.node.height + 80)
|
|
itemNode.opacity = 0;
|
|
itemNode.parent = this.rewardPanel.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()
|
|
}
|
|
|
|
fillAmout(num) {
|
|
var ratioArr = [0, 7.2, 18.8, 30, 41, 52.2, 63.5, 75, 86, 97]
|
|
var moneyArr = [0, 30, 98, 300, 600, 2000, 3000, 4500, 6000, 10000]
|
|
var ratio = 0;
|
|
if (num >= 10000) {
|
|
FGUtil.getImage(this.rewardPanel, "alert/n49/sz1").fillAmount = 1
|
|
return;
|
|
}
|
|
for (let i = 1; i < 10; i++) {
|
|
if (num < moneyArr[i]) {
|
|
ratio = ratioArr[i - 1] + (ratioArr[i] - ratioArr[i - 1]) * ((num - moneyArr[i - 1]) / moneyArr[i])
|
|
break;
|
|
}
|
|
}
|
|
FGUtil.getImage(this.rewardPanel, "alert/n49/sz1").fillAmount = ratio / 100;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
openRewardPanel2(refresh: Boolean = false) {
|
|
if (!this.rewardPanel || (this.rewardPanel && !this.rewardPanel.node && !SKUIUtil.isValid(this.rewardPanel.node))) {
|
|
this.rewardPanel = FGUtil.create("main_ui", "rechargeRewardPanel2");
|
|
FGUtil.root().addChild(this.rewardPanel);
|
|
this.rewardPanel.makeFullScreen();
|
|
}
|
|
this.panelType = 2;
|
|
let charge = GameModel.conf_charge["1"];
|
|
// var num = GameModel.player.chargesum * (charge.jade / charge.money)
|
|
var num = GameModel.player.chargesum;
|
|
|
|
FGUtil.getTextField(this.rewardPanel, "alert/count").text = String(num);
|
|
this.initRewardList2(num);
|
|
var mask = FGUtil.getComponent(this.rewardPanel, "mask");
|
|
var close = FGUtil.getButton(this.rewardPanel, "alert/close");
|
|
this.pushCloseEvent(mask, this.rewardPanel);
|
|
this.pushCloseEvent(close, this.rewardPanel);
|
|
|
|
|
|
if (this.prefabObject["dragonBones"] != null) {
|
|
var db = cc.instantiate(this.prefabObject["dragonBones"]);
|
|
db.setPosition(10, -120)
|
|
db.parent = FGUtil.getComponent(this.rewardPanel, "alert/role").node;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 初始化獎勵列表
|
|
*/
|
|
initRewardList2(num) {
|
|
let reward_list = GameModel.conf_charge_reward2;
|
|
|
|
let list = [];
|
|
for (let i = 1; reward_list[i]; ++i) {
|
|
let item = reward_list[i];
|
|
list.push(item);
|
|
}
|
|
list.sort((a, b) => {
|
|
return a.money - b.money;
|
|
});
|
|
|
|
let rewardList = FGUtil.getList(this.rewardPanel, "alert/list")
|
|
rewardList.removeChildrenToPool();
|
|
for (let i = 0; i < list.length; i++) {
|
|
let rewardItem = rewardList.addItemFromPool().asCom;
|
|
FGUtil.getTextField(rewardItem, "title").text = `累計充值${list[i].money}元(${num}元/${list[i].money}元)`
|
|
let has_gain = ((GameModel.player.rewardrecord & (1 << (i))) > 0);
|
|
let getBtn = FGUtil.getButton(rewardItem, "get_btn");
|
|
let flag = FGUtil.getComponent(rewardItem, "flag");
|
|
// console.log("是否領取", i, has_gain)
|
|
if (has_gain) {
|
|
flag.visible = true;
|
|
getBtn.visible = false;
|
|
} else {
|
|
flag.visible = false;
|
|
if (num >= list[i].money) {
|
|
getBtn.data = i + 1;
|
|
getBtn.onClick(this.clickGet, this);
|
|
} else {
|
|
getBtn.visible = false
|
|
}
|
|
}
|
|
|
|
for (let j = 0; j < list[i].list.length; j++) {
|
|
let itemData = ItemUtil.getItemData(list[i].list[j].itemIid);
|
|
let itemBtn = FGUtil.getButton(rewardItem, `item_${j + 1}`);
|
|
itemBtn.icon = `ui://main_ui/${itemData.icon}`;
|
|
itemBtn.clearClick();
|
|
itemBtn.onClick((eve) => {
|
|
eve.stopPropagation()
|
|
this.showInfo(itemData)
|
|
})
|
|
let tip = FGUtil.getTextField(itemBtn, "tip");
|
|
tip.text = `${SKDataUtil.transform(list[i].list[j].count)}`;
|
|
tip.visible = true;
|
|
let anim = FGUtil.getAnim(itemBtn, "effect");
|
|
anim.visible = getBtn.visible;
|
|
anim.playing = getBtn.visible;
|
|
}
|
|
}
|
|
}
|
|
clickGet(event: fgui.Event) {
|
|
if (this.isRewarding) {
|
|
MsgAlert.addMsg("您點擊太快了")
|
|
return
|
|
}
|
|
|
|
|
|
this.isRewarding = true;
|
|
let temp = fgui.GObject.cast(event.currentTarget);
|
|
let idx = temp.data;
|
|
let rewardList = FGUtil.getList(this.rewardPanel, "alert/list")
|
|
var rewardItem = rewardList.getChildAt(idx - 1).asCom;
|
|
let getBtn = FGUtil.getButton(rewardItem, "get_btn");
|
|
let flag = FGUtil.getComponent(rewardItem, "flag");
|
|
getBtn.visible = false
|
|
flag.visible = true
|
|
GameModel.send('c2s_charge_reward', { rewardid: idx });
|
|
this.scheduleOnce(() => {
|
|
this.isRewarding = false;
|
|
}, 0.5)
|
|
}
|
|
|
|
|
|
|
|
openRewardPanel3(refresh: Boolean = false) {
|
|
if (!SKUIUtil.isFGUIValid(this.rewardPanel)) {
|
|
this.rewardPanel = FGUtil.create("main_ui", "rechargeRewardPanel3");
|
|
FGUtil.root().addChild(this.rewardPanel);
|
|
this.rewardPanel.makeFullScreen();
|
|
}
|
|
this.panelType = 3;
|
|
|
|
var num = GameModel.player.chargesum;
|
|
|
|
FGUtil.getTextField(this.rewardPanel, "alert/count").text = String(num);
|
|
this.initRewardList3(num);
|
|
var mask = FGUtil.getComponent(this.rewardPanel, "mask");
|
|
var close = FGUtil.getButton(this.rewardPanel, "alert/close");
|
|
this.pushCloseEvent(mask, this.rewardPanel);
|
|
this.pushCloseEvent(close, this.rewardPanel);
|
|
}
|
|
|
|
initRewardList3(num) {
|
|
let reward_list = GameModel.conf_charge_reward3;
|
|
|
|
let list = [];
|
|
for (let i = 1; reward_list[i]; ++i) {
|
|
let item = reward_list[i];
|
|
list.push(item);
|
|
}
|
|
list.sort((a, b) => {
|
|
return a.money - b.money;
|
|
});
|
|
|
|
let rewardList = FGUtil.getList(this.rewardPanel, "alert/list")
|
|
rewardList.removeChildrenToPool();
|
|
for (let i = 0; i < list.length; i++) {
|
|
let rewardItem = rewardList.addItemFromPool().asCom;
|
|
FGUtil.getTextField(rewardItem, "title").text = `累計充值${list[i].money}元(${num}元/${list[i].money}元)`
|
|
let has_gain = ((GameModel.player.sprewardrecord & (1 << (i))) > 0);
|
|
let getBtn = FGUtil.getButton(rewardItem, "get_btn");
|
|
let flag = FGUtil.getComponent(rewardItem, "flag");
|
|
|
|
if (has_gain) {
|
|
flag.visible = true;
|
|
getBtn.visible = false;
|
|
} else {
|
|
flag.visible = false;
|
|
if (num >= list[i].money) {
|
|
getBtn.data = i + 1;
|
|
getBtn.onClick(this.clickGet3, this);
|
|
} else {
|
|
getBtn.visible = false
|
|
}
|
|
}
|
|
|
|
for (let j = 0; j < 4; j++) {
|
|
if (j >= list[i].list.length) {
|
|
FGUtil.getButton(rewardItem, `item_${j + 1}`).visible = false;
|
|
continue
|
|
}
|
|
let itemData = ItemUtil.getItemData(list[i].list[j].itemIid);
|
|
let itemBtn = FGUtil.getButton(rewardItem, `item_${j + 1}`);
|
|
itemBtn.visible = true
|
|
itemBtn.icon = `ui://main_ui/${itemData.icon}`;
|
|
itemBtn.clearClick();
|
|
itemBtn.onClick((eve) => {
|
|
eve.stopPropagation()
|
|
this.showInfo(itemData)
|
|
})
|
|
let tip = FGUtil.getTextField(itemBtn, "tip");
|
|
tip.text = `${SKDataUtil.transform(list[i].list[j].count)}`;
|
|
tip.visible = true;
|
|
let anim = FGUtil.getAnim(itemBtn, "effect");
|
|
anim.visible = getBtn.visible;
|
|
anim.playing = getBtn.visible;
|
|
}
|
|
}
|
|
}
|
|
|
|
clickGet3(event: fgui.Event) {
|
|
if (this.isRewarding) {
|
|
MsgAlert.addMsg("您點擊太快了")
|
|
return
|
|
}
|
|
|
|
this.isRewarding = true;
|
|
let temp = fgui.GObject.cast(event.currentTarget);
|
|
let idx = temp.data;
|
|
let rewardList = FGUtil.getList(this.rewardPanel, "alert/list")
|
|
var rewardItem = rewardList.getChildAt(idx - 1).asCom;
|
|
let getBtn = FGUtil.getButton(rewardItem, "get_btn");
|
|
let flag = FGUtil.getComponent(rewardItem, "flag");
|
|
getBtn.visible = false
|
|
flag.visible = true
|
|
GameModel.send('c2s_special_reward', { rewardid: idx });
|
|
this.scheduleOnce(() => {
|
|
this.isRewarding = false;
|
|
}, 0.5)
|
|
|
|
}
|
|
}
|