329 lines
13 KiB
Lua
329 lines
13 KiB
Lua
require("Base/BasePanel")
|
||
---魂印占星面板
|
||
SoulPrintAstrologyPanel = Inherit(BasePanel)
|
||
local this = SoulPrintAstrologyPanel
|
||
local orginLayer
|
||
|
||
this.curLv = 0 --当前等级
|
||
this.routePos = {} --进度条列表
|
||
this.starsPos = {} --星位置列表
|
||
this.unlockEffect = {} --解锁特效列表
|
||
this.thread = nil --遮罩协程
|
||
--占星类型
|
||
this.AstrologyType = {
|
||
Once = 1,
|
||
Fifty = 50,
|
||
}
|
||
--解锁类型
|
||
this.UnlockType = {
|
||
Single = 1,
|
||
Multiple = 2,
|
||
Force = 3,
|
||
}
|
||
--初始化组件(用于子类重写)
|
||
function SoulPrintAstrologyPanel:InitComponent()
|
||
this.spLoader = SpriteLoader.New()
|
||
orginLayer = 0
|
||
this.UpView = SubUIManager.Open(SubUIConfig.UpView, self.gameObject.transform, { showType = UpViewOpenType.ShowLeft })
|
||
this.backBtn = Util.GetGameObject(self.gameObject, "BackBtn")
|
||
this.effect = Util.GetGameObject(self.gameObject, "BG/Effect") --上层特效
|
||
this.helpBtn = Util.GetGameObject(self.transform, "HelpBtn")
|
||
this.helpPosition = this.helpBtn:GetComponent("RectTransform").localPosition
|
||
this.forceBtn = Util.GetGameObject(self.gameObject, "RightView/ForceBtn") --强行召唤按钮
|
||
this.shopBtn = Util.GetGameObject(self.gameObject, "RightView/ShopBtn") --魂印商城按钮
|
||
this.warehouseBtn = Util.GetGameObject(self.gameObject, "RightView/WarehouseBtn") --魂印仓库按钮
|
||
this.btn1 = Util.GetGameObject(self.gameObject, "Btn1")
|
||
this.btn50 = Util.GetGameObject(self.gameObject, "Btn50")
|
||
this.mask = Util.GetGameObject(self.gameObject, "Mask")
|
||
this.coinNum = Util.GetGameObject(this.btn1, "Coin/CoinNum"):GetComponent("Text")
|
||
for i = 1, 4 do
|
||
this.routePos[i] = Util.GetGameObject(self.gameObject, "RoutePos").transform:GetChild(i - 1).gameObject
|
||
end
|
||
for i = 1, 5 do
|
||
this.starsPos[i] = Util.GetGameObject(self.gameObject, "StarsPos").transform:GetChild(i - 1).gameObject
|
||
this.unlockEffect[i] = Util.GetGameObject(this.starsPos[i], "UnlockEffect")
|
||
end
|
||
end
|
||
|
||
--绑定事件(用于子类重写)
|
||
function SoulPrintAstrologyPanel:BindEvent()
|
||
Util.AddClick(this.backBtn, function()
|
||
self:ClosePanel()
|
||
end)
|
||
--帮助按钮
|
||
Util.AddClick(this.helpBtn, function()
|
||
UIManager.OpenPanel(UIName.HelpPopup, HELP_TYPE.Astrology, this.helpPosition.x, this.helpPosition.y)
|
||
end)
|
||
--强行召唤按钮
|
||
Util.AddClick(this.forceBtn, function()
|
||
local costId, costNum = ShopManager.calculateBuyCost(SHOP_TYPE.FUNCTION_SHOP, 10019, 1)
|
||
CostConfirmPopup.Show(costId, costNum, Language[12874], Language[12875],
|
||
function()
|
||
this.Force()
|
||
end, COST_CONFIRM_TYPE.SOUL_PRINT)
|
||
end)
|
||
--魂印商店按钮
|
||
Util.AddClick(this.shopBtn, function()
|
||
UIManager.OpenPanel(UIName.MainShopPanel, SHOP_TYPE.SOUL_PRINT_SHOP)
|
||
end)
|
||
--魂印仓库按钮
|
||
Util.AddClick(this.warehouseBtn, function()
|
||
UIManager.OpenPanel(UIName.BagPanel, 6)
|
||
end)
|
||
Util.AddClick(this.btn1, function()
|
||
this.Astrology(this.AstrologyType.Once)
|
||
end)
|
||
Util.AddClick(this.btn50, function()
|
||
this.Astrology(this.AstrologyType.Fifty)
|
||
end)
|
||
--提示框确定按钮
|
||
Util.AddClick(this.tipConfirmBtn, function()
|
||
local isShow = this.tipToggle.isOn
|
||
if isShow == true then
|
||
local currentTime = os.date("%Y%m%d", PlayerManager.serverTime)
|
||
RedPointManager.PlayerPrefsSetStr(PlayerManager.uid .. "isShowPopUp", currentTime)
|
||
end
|
||
this.Force()
|
||
end)
|
||
end
|
||
|
||
function this:OnSortingOrderChange()
|
||
Util.AddParticleSortLayer(this.effect, this.sortingOrder - orginLayer)
|
||
Util.AddParticleSortLayer(Util.GetGameObject(self.gameObject, "StarsPos"), this.sortingOrder - orginLayer)
|
||
Util.AddParticleSortLayer(Util.GetGameObject(self.gameObject, "RoutePos"), this.sortingOrder - orginLayer)
|
||
orginLayer = this.sortingOrder
|
||
end
|
||
|
||
--添加事件监听(用于子类重写)
|
||
function SoulPrintAstrologyPanel:AddListener()
|
||
end
|
||
|
||
--移除事件监听(用于子类重写)
|
||
function SoulPrintAstrologyPanel:RemoveListener()
|
||
end
|
||
|
||
--界面打开时调用(用于子类重写)
|
||
function SoulPrintAstrologyPanel:OnOpen(...)
|
||
end
|
||
|
||
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
|
||
function SoulPrintAstrologyPanel:OnShow()
|
||
--this.ClearPos()
|
||
this.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.Main })
|
||
|
||
--获取当前占星等级
|
||
this.curLv = SoulPrintManager.soulEquipPool
|
||
this.ShowPos(this.curLv)
|
||
this.RefreshConsumeCoins(this.curLv)
|
||
end
|
||
|
||
--界面关闭时调用(用于子类重写)
|
||
function SoulPrintAstrologyPanel:OnClose()
|
||
this.ClearPos()
|
||
end
|
||
|
||
--界面销毁时调用(用于子类重写)
|
||
function SoulPrintAstrologyPanel:OnDestroy()
|
||
this.spLoader:Destroy()
|
||
SubUIManager.Close(this.UpView)
|
||
end
|
||
|
||
--占星(1/50)
|
||
function this.Astrology(type)
|
||
this.DelayMask(1.5)
|
||
--判断天衍星相条件是否满足
|
||
local curCoinNum = BagManager.GetItemCountById(14) --当前金币
|
||
local curData = ConfigManager.GetConfigData(ConfigName.EquipTalismanaLottery, this.curLv)
|
||
local needOnceCoin = curData.CostItem[2] --单次需要的金币
|
||
local needFiftyCoin = curData.RepeatedlyCost[2] --多次需要的金币
|
||
|
||
--服务器请求数据
|
||
if type == this.AstrologyType.Once then
|
||
if curCoinNum < needOnceCoin then
|
||
--Log("==YSP==单次抽 钱不够 当前金币"..curCoinNum.." ".."需要的金币"..needOnceCoin)
|
||
UIManager.OpenPanel(UIName.QuickPurchasePanel, { type = UpViewRechargeType.Gold })
|
||
return
|
||
end
|
||
--Log("==YSP==单次抽 钱够 当前金币"..curCoinNum.." ".."需要的金币"..needOnceCoin)
|
||
NetManager.GetSoulRandRequest(type, function(msg)
|
||
SoulPrintManager.soulEquipPool = msg.pos
|
||
--Log(tostring(msg))
|
||
this.ShowPosEffect(this.AstrologyType.Once, msg)
|
||
this.RefreshConsumeCoins(msg.pos)
|
||
end)
|
||
elseif type == this.AstrologyType.Fifty then
|
||
--判断是否够抽50次
|
||
if curCoinNum >= needFiftyCoin then --钱够50
|
||
--Log("==YSP==50抽 钱够 当前金币"..curCoinNum.." ".."需要的金币"..needFiftyCoin)
|
||
NetManager.GetSoulRandRequest(type, function(msg)
|
||
SoulPrintManager.soulEquipPool = msg.pos
|
||
--Log(tostring(msg))
|
||
this.ShowPosEffect(this.AstrologyType.Fifty, msg)
|
||
this.RefreshConsumeCoins(msg.pos)
|
||
end)
|
||
else --钱不够50
|
||
NetManager.GetSoulRandRequest(-1, function(msg)
|
||
if msg.time == 0 then
|
||
--Log("==YSP==钱不够50啊 抽了"..msg.time.."次")
|
||
UIManager.OpenPanel(UIName.QuickPurchasePanel, { type = UpViewRechargeType.Gold })
|
||
return
|
||
end
|
||
SoulPrintManager.soulEquipPool = msg.pos
|
||
--Log(tostring(msg))
|
||
--Log("==YSP==钱不够50啊 抽了"..msg.time.."次")
|
||
this.ShowPosEffect(this.AstrologyType.Fifty, msg)
|
||
this.RefreshConsumeCoins(msg.pos)
|
||
end)
|
||
end
|
||
end
|
||
end
|
||
|
||
--强行召唤(天衍星相)
|
||
function this.Force()
|
||
this.DelayMask(1.5)
|
||
local curNum = BagManager.GetItemCountById(16) --当前魂晶
|
||
local needNum = ShopManager.GetShopItemInfo(10019).Cost[2][4] --需要的数量
|
||
if curNum < needNum then
|
||
UIManager.OpenPanel(UIName.QuickPurchasePanel, { type = UpViewRechargeType.DemonCrystal })
|
||
return
|
||
end
|
||
NetManager.GetSoulForceRandRequest(function(msg)
|
||
this.ShowPos(msg.pos)
|
||
SoulPrintManager.soulEquipPool = msg.pos
|
||
this.UnlockEffect(this.UnlockType.Force)
|
||
this.RefreshConsumeCoins(msg.pos)
|
||
this.RewardPopup(this.UnlockType.Force, msg, 1.2)
|
||
end)
|
||
end
|
||
|
||
--重置星级显示位置
|
||
function this.ClearPos()
|
||
for i = 1, 5 do
|
||
Util.GetGameObject(this.starsPos[i], "StarOpen"):SetActive(false)
|
||
end
|
||
for i = 1, 4 do
|
||
Util.GetGameObject(this.routePos[i], "RouteOpen"):SetActive(false)
|
||
Util.GetGameObject(this.routePos[i], "RouteEffect"):SetActive(false)
|
||
end
|
||
end
|
||
|
||
--设置星级显示位置(直接显示)
|
||
function this.ShowPos(pos)
|
||
this.ClearPos()
|
||
this.curLv = pos
|
||
for i = 1, pos do
|
||
Util.GetGameObject(this.starsPos[i], "StarOpen"):SetActive(true)
|
||
if i ~= 1 then
|
||
Util.GetGameObject(this.routePos[i - 1], "RouteOpen"):SetActive(true)
|
||
end
|
||
end
|
||
end
|
||
|
||
--设置星级显示位置(效果显示)
|
||
--type 显示类型 msg 消息体
|
||
function this.ShowPosEffect(type, msg)
|
||
--观星一次效果
|
||
if type == this.AstrologyType.Once then
|
||
if msg.pos > this.curLv then --如果前进
|
||
--Log("==YSP==前进")
|
||
Util.GetGameObject(this.routePos[this.curLv], "RouteEffect"):SetActive(true)
|
||
local loop = Timer.New(function()
|
||
Util.GetGameObject(this.routePos[this.curLv - 1], "RouteEffect"):SetActive(true)
|
||
Util.GetGameObject(this.routePos[this.curLv - 1], "RouteOpen"):SetActive(true)
|
||
Util.GetGameObject(this.starsPos[this.curLv], "StarOpen"):SetActive(true)
|
||
this.UnlockEffect(this.UnlockType.Single)
|
||
this.RewardPopup(this.UnlockType.Single, msg, 1.2)
|
||
end, 0.2, 1, true)
|
||
loop:Start()
|
||
this.curLv = msg.pos
|
||
elseif msg.pos == this.curLv then --如果相等
|
||
--Log("==YSP==相等")
|
||
this.UnlockEffect(this.UnlockType.Single)
|
||
this.RewardPopup(this.UnlockType.Single, msg, 1.2)
|
||
elseif msg.pos < this.curLv then --如果后退
|
||
--Log("==YSP==后退")
|
||
this.ShowPos(msg.pos)
|
||
this.UnlockEffect(this.UnlockType.Single)
|
||
this.RewardPopup(this.UnlockType.Single, msg, 1.2)
|
||
end
|
||
--观星50次效果
|
||
elseif type == this.AstrologyType.Fifty then
|
||
for i = 1, #this.routePos do
|
||
Util.GetGameObject(this.routePos[i], "RouteOpen"):SetActive(true) --开启效果
|
||
end
|
||
for i = 1, #this.starsPos do
|
||
Util.GetGameObject(this.starsPos[i], "StarOpen"):SetActive(true)
|
||
end
|
||
this.UnlockEffect(this.UnlockType.Multiple)
|
||
this.RewardPopup(this.UnlockType.Multiple, msg, 1.2) --延时弹窗
|
||
local reductionEffect = Timer.New(function() --延时还原效果
|
||
this.ShowPos(msg.pos)
|
||
end, 1.3, 1, true)
|
||
reductionEffect:Start()
|
||
end
|
||
end
|
||
|
||
--解锁特效
|
||
--type 显示类型
|
||
function this.UnlockEffect(type)
|
||
if type == this.UnlockType.Single then
|
||
this.unlockEffect[this.curLv].gameObject:SetActive(true)
|
||
local closeUnlockEffect = Timer.New(function()
|
||
this.unlockEffect[this.curLv].gameObject:SetActive(false)
|
||
end, 1, 1, true)
|
||
closeUnlockEffect:Start()
|
||
elseif type == this.UnlockType.Multiple then
|
||
for i = 1, #this.unlockEffect do
|
||
this.unlockEffect[i].gameObject:SetActive(true)
|
||
end
|
||
local closeUnlockEffect = Timer.New(function()
|
||
for i = 1, #this.unlockEffect do
|
||
this.unlockEffect[i].gameObject:SetActive(false)
|
||
end
|
||
end, 1, 1, true)
|
||
closeUnlockEffect:Start()
|
||
elseif type == this.UnlockType.Force then
|
||
for i = 1, 4 do
|
||
this.unlockEffect[i].gameObject:SetActive(true)
|
||
end
|
||
local closeUnlockEffect = Timer.New(function()
|
||
for i = 1, 4 do
|
||
this.unlockEffect[i].gameObject:SetActive(false)
|
||
end
|
||
end, 1, 1, true)
|
||
closeUnlockEffect:Start()
|
||
end
|
||
end
|
||
|
||
--奖励弹窗
|
||
--msg 消息体 delayTime 延时弹窗时间
|
||
function this.RewardPopup(type, msg, delayTime)
|
||
local openPanel = Timer.New(function()
|
||
UIManager.OpenPanel(UIName.RewardItemPopup, msg.drop, 1, function()
|
||
if type == this.UnlockType.Force then --当为强制观星时 返回
|
||
return
|
||
end
|
||
if msg.time < 50 and type == this.UnlockType.Multiple then --回调函数 当不足50次并且为多抽时 显示已抽几次
|
||
PopupTipPanel.ShowTip(Language[12876] .. msg.time .. Language[12877])
|
||
end
|
||
end)
|
||
end, delayTime, 1, true)
|
||
openPanel:Start()
|
||
end
|
||
|
||
--刷新占星一次消耗金币
|
||
function this.RefreshConsumeCoins(pos)
|
||
this.coinNum.text = ConfigManager.GetConfigData(ConfigName.EquipTalismanaLottery, pos).CostItem[2]
|
||
end
|
||
|
||
--延时遮罩
|
||
function this.DelayMask(delayTime)
|
||
this.mask.gameObject:SetActive(true)
|
||
local closeMask = Timer.New(function()
|
||
this.mask.gameObject:SetActive(false)
|
||
end, delayTime, 1, true)
|
||
closeMask:Start()
|
||
end
|
||
|
||
return SoulPrintAstrologyPanel
|