Files
StellaSora_DataLua/lua/game/ui/exchange/exchangectrl.lua
T
SL1900 5e0d58cfad Initial version - 1.2.0.60
EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
2025-12-03 01:00:00 +09:00

223 lines
6.8 KiB
Lua
Raw 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.
local BaseCtrl = require("GameCore.UI.BaseCtrl")
local ExChangeCtrl = class("ExChangeCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
local MAX_EXCHANGE_COUNT = 999999
ExChangeCtrl._mapNodeConfig = {
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Exchange_Title"
},
btnsnapshot = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtnClick_Close"
},
aniDetail = {
sNodeName = "---Detail---",
sComponentName = "Animator"
},
imgItem1 = {sNodeName = "imgItem1", sComponentName = "Image"},
imgItem2 = {sNodeName = "imgItem2", sComponentName = "Image"},
btnClose = {
sNodeName = "btnClose",
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnBuy = {
sNodeName = "btnBuy",
sComponentName = "UIButton",
callback = "OnBtnClick_Buy"
},
txtBtnExchange = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "Exchange_Btn"
},
txtConsunNum = {
sNodeName = "txtConsumNum",
sComponentName = "TMP_Text"
},
rectConsunNum = {
sNodeName = "txtConsumNum",
sComponentName = "RectTransform"
},
imgimgConsumItem = {
sNodeName = "imgConsumItem",
sComponentName = "Image"
},
got_fullscreen_blur_blue = {
sNodeName = "t_fullscreen_blur_blue",
sComponentName = "GameObject"
},
ctlTopBarPanel = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
gobtnBuyGray = {sNodeName = "btnBuyGray", sComponentName = "GameObject"},
btnBuyGray = {
sNodeName = "btnBuyGray",
sComponentName = "UIButton",
callback = "OnBtnClick_Buy"
},
txtItemName1 = {
sNodeName = "txtItemName1",
sComponentName = "TMP_Text"
},
txtItemName2 = {
sNodeName = "txtItemName2",
sComponentName = "TMP_Text"
},
rectTransgoConsumCount = {
sNodeName = "goConsumCount",
sComponentName = "RectTransform"
},
imgMask = {sNodeName = "Mask", sComponentName = "Image"},
txtStock = {
sComponentName = "TMP_Text",
sLanguageId = "Exchange_Count"
},
txtConsum = {
sComponentName = "TMP_Text",
sLanguageId = "Exchange_Consume"
},
goQuantitySelector = {
sNodeName = "tc_quantity_selector",
sCtrlName = "Game.UI.TemplateEx.TemplateQuantitySelectorCtrl"
}
}
ExChangeCtrl._mapEventConfig = {}
function ExChangeCtrl:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" and 0 < #tbParam then
local data = tbParam[1]
if data.id1 ~= nil then
self.exchangeId1 = data.id1
else
self.exchangeId1 = AllEnum.CoinItemId.STONE
end
if data.id2 ~= nil then
self.exchangeId2 = data.id2
else
self.exchangeId2 = AllEnum.CoinItemId.Jade
end
if data.exchangeCount ~= nil then
self.curExChangeCount = data.exchangeCount
else
self.curExChangeCount = 1
end
if data.rate ~= nil then
self.exchangeRate = data.rate
else
self.exchangeRate = 1
end
if data.alpha ~= nil then
self.maskAlpha = data.alpha
else
self.maskAlpha = 0.35
end
else
self.exchangeId1 = AllEnum.CoinItemId.STONE
self.exchangeId2 = AllEnum.CoinItemId.Jade
self.exchangeRate = 1
self.maskAlpha = 0.35
self.curExChangeCount = 1
end
self.bExChanging = false
end
function ExChangeCtrl:OnEnable()
self:RefreshPanel()
self._mapNode.aniDetail:Play("t_window_04_t_in")
self._mapNode.got_fullscreen_blur_blue:SetActive(true)
end
function ExChangeCtrl:RefreshPanel()
NovaAPI.SetTMPText(self._mapNode.txtConsunNum, self.curExChangeCount)
NovaAPI.SetTMPText(self._mapNode.txtItemName1, ConfigTable.GetData_Item(self.exchangeId1).Title .. " ×1")
NovaAPI.SetTMPText(self._mapNode.txtItemName2, ConfigTable.GetData_Item(self.exchangeId2).Title .. " ×1")
self:SetPngSprite(self._mapNode.imgItem1, ConfigTable.GetData_Item(self.exchangeId1).Icon)
self:SetPngSprite(self._mapNode.imgItem2, ConfigTable.GetData_Item(self.exchangeId2).Icon)
self:SetPngSprite(self._mapNode.imgimgConsumItem, ConfigTable.GetData_Item(self.exchangeId1).Icon2)
local owenCount = self:GetOwenItemCount()
local maxCount = owenCount
if owenCount > MAX_EXCHANGE_COUNT then
maxCount = MAX_EXCHANGE_COUNT
elseif owenCount == 0 then
maxCount = 1
end
local callback = function(nCount)
self.curExChangeCount = nCount
self:RefreshConsumCount()
end
self._mapNode.goQuantitySelector:Init(callback, self.curExChangeCount, maxCount)
self:RefreshConsumCount()
local color = NovaAPI.GetImageColor(self._mapNode.imgMask)
color.a = self.maskAlpha
NovaAPI.SetImageColor(self._mapNode.imgMask, color)
end
function ExChangeCtrl:RefreshConsumCount()
self._mapNode.gobtnBuyGray:SetActive(false)
self._mapNode.btnBuy.gameObject:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtConsunNum, self.curExChangeCount)
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rectConsunNum)
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rectTransgoConsumCount)
end
function ExChangeCtrl:OnClosePanel()
EventManager.Hit(EventId.ClosePanel, PanelId.ExChangePanel)
end
function ExChangeCtrl:GetOwenItemCount()
local count = PlayerData.Item:GetItemCountByID(self.exchangeId1)
if self.exchangeId1 == AllEnum.CoinItemId.STONE then
count = count + PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.FREESTONE)
end
return count
end
function ExChangeCtrl:OnBtnClick_Buy()
local owenCount = self:GetOwenItemCount()
if owenCount <= 0 or owenCount < self.curExChangeCount then
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = orderedFormat(ConfigTable.GetUIText("Recruit_Charge") or "", ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE).Id),
callbackConfirm = function()
self:OnClosePanel()
local nState = ConfigTable.GetConfigNumber("IsShowComBtn")
if nState == 1 then
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Gem)
else
local sContent = ConfigTable.GetUIText("Function_NotAvailable")
EventManager.Hit(EventId.OpenMessageBox, sContent)
end
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
EventManager.Hit("TopRes", true, self._mapNode.ctlTopBarPanel.gameObject:GetInstanceID(), {
AllEnum.CoinItemId.Jade,
AllEnum.CoinItemId.STONE
})
return
end
local exchangeSuccessCallBack = function(mapData)
self.bExChanging = false
self:OnClosePanel()
end
local confirmCallback = function()
if self.bExChanging == true then
return
end
self.bExChanging = true
PlayerData.Coin:SendGemConvertReqReq(self.curExChangeCount, exchangeSuccessCallBack)
end
local sTips = orderedFormat(ConfigTable.GetUIText("Shop_BuyComfirm"), self.curExChangeCount, ConfigTable.GetData_Item(self.exchangeId1).Title, ConfigTable.GetData_Item(self.exchangeId2).Title)
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = sTips,
callbackConfirm = confirmCallback,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function ExChangeCtrl:OnBtnClick_Close()
self._mapNode.aniDetail:Play("t_window_04_t_out")
self:AddTimer(1, 0.2, "OnClosePanel", true, true, true)
end
return ExChangeCtrl