Files
StellaSora_DataLua/lua/game/ui/startowerfastbattle/startowertokenbuyitemusectrl.lua
T
SL1900 08b515afd9 Major Update - 2.0.0.143
EN: 2.0.0.143
CN: 2.0.0.142
JP: 2.0.0.145
KR: 2.0.0.150
2026-10-20 13:00:00 +09:00

208 lines
6.5 KiB
Lua

local StarTowerTokenBuyItemUseCtrl = class("StarTowerTokenBuyItemUseCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
StarTowerTokenBuyItemUseCtrl._mapNodeConfig = {
goWindow = {},
animWindow = {sNodeName = "goWindow", sComponentName = "Animator"},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Title"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnItem = {
sComponentName = "UIButton",
callback = "OnBtnClick_Item"
},
ctrlItem = {
sNodeName = "goItem",
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
},
txtItemName = {sComponentName = "TMP_Text"},
txtItemDesc = {sComponentName = "TMP_Text"},
txtHaveCount = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Count_Text"
},
txtHaveCountValue = {sComponentName = "TMP_Text"},
txtAddValue = {sComponentName = "TMP_Text"},
txtPermanent = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Permanent_Time"
},
txtStock = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Count"
},
goQuantitySelector = {
sNodeName = "tc_quantity_selector",
sCtrlName = "Game.UI.TemplateEx.TemplateQuantitySelectorCtrl"
},
txtHave = {
sComponentName = "TMP_Text",
sLanguageId = "TokenBuy_Confirm_Text"
},
imgArrow = {},
txtBeforeValue = {sComponentName = "TMP_Text"},
txtAfterValue = {sComponentName = "TMP_Text"},
goMaxValue = {},
txtMaxValue = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Count_Max"
},
rtCountBg = {
sNodeName = "imgCountBg",
sComponentName = "RectTransform"
},
btnConfirm2 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
txtConfirmBtn = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Btn_Text"
}
}
StarTowerTokenBuyItemUseCtrl._mapEventConfig = {}
function StarTowerTokenBuyItemUseCtrl:Awake()
end
function StarTowerTokenBuyItemUseCtrl:OnEnable()
end
function StarTowerTokenBuyItemUseCtrl:ShowPanel()
self.mapItemData = self._panel.mapItemData
self.bBlur = self._panel.bBlur
self.nUseCount = 1
self.nMaxCount = 0
self.nMinCount = 0
self._mapNode.animWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self:RefreshItem()
local callback = function(nCount)
self.nUseCount = nCount
self:RefreshAddCount()
end
self._mapNode.goQuantitySelector:Init(callback, self.nUseCount, self.nUseCountLimit)
self:RefreshAddCount()
end
function StarTowerTokenBuyItemUseCtrl:OnDisable()
end
function StarTowerTokenBuyItemUseCtrl:OnDestroy()
end
function StarTowerTokenBuyItemUseCtrl:RefreshItem()
local itemId = self.mapItemData.nTid
self._mapNode.ctrlItem:SetItem(itemId, nil, nil, nil, nil, nil, nil, true, nil, true)
local mapItemCfg = ConfigTable.GetData_Item(itemId)
if mapItemCfg then
NovaAPI.SetTMPText(self._mapNode.txtItemName, mapItemCfg.Title)
NovaAPI.SetTMPText(self._mapNode.txtItemDesc, mapItemCfg.Desc)
end
NovaAPI.SetTMPText(self._mapNode.txtHaveCountValue, self.mapItemData.nCount)
self.nMaxCount = self.mapItemData.nCount
local nCountTemp = self.mapItemData.nTokenValue * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
local nRatio = math.floor(nCountTemp)
NovaAPI.SetTMPText(self._mapNode.txtAddValue, string.format("+%s", nRatio .. "%"))
self.nUseCountLimit = 0
local nCurToken = PlayerData.StarTowerAutoPlan:GetTokenCount()
for i = 1, self.nMaxCount do
nCurToken = nCurToken + self.mapItemData.nTokenValue
self.nUseCountLimit = i
if nCurToken >= self._panel.nMaxToken then
break
end
end
end
function StarTowerTokenBuyItemUseCtrl:RefreshAddCount()
local nCurToken = PlayerData.StarTowerAutoPlan:GetTokenCount()
local nCountTemp = nCurToken * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
local nRatio = math.floor(nCountTemp)
NovaAPI.SetTMPText(self._mapNode.txtBeforeValue, nRatio .. "%")
local nAfterValue = nCurToken + self.mapItemData.nTokenValue * self.nUseCount
nCountTemp = nAfterValue * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
nRatio = math.floor(nCountTemp)
NovaAPI.SetTMPText(self._mapNode.txtAfterValue, nRatio .. "%")
self._mapNode.imgArrow.gameObject:SetActive(0 < self.nUseCount)
self._mapNode.txtAfterValue.gameObject:SetActive(0 < self.nUseCount)
self._mapNode.goMaxValue.gameObject:SetActive(nAfterValue >= self._panel.nMaxToken)
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCountBg)
end
function StarTowerTokenBuyItemUseCtrl:Close()
self._mapNode.animWindow:Play("t_window_04_t_out")
EventManager.Hit("ConsumableUsed")
end
function StarTowerTokenBuyItemUseCtrl:OnBtnClick_Close()
EventManager.Hit("CloseTokenBuyPanel")
end
function StarTowerTokenBuyItemUseCtrl:OnBtnClick_Confirm()
if self.nUseCount <= 0 then
return
end
local itemList = {}
local nUseCount = 0
for id, count in pairs(self.mapItemData.mapId) do
if nUseCount < self.nUseCount then
local tbItem = {}
tbItem.Tid = self.mapItemData.nTid
tbItem.Id = id
if nUseCount + count > self.nUseCount then
tbItem.Qty = self.nUseCount - nUseCount
else
tbItem.Qty = count
end
table.insert(itemList, tbItem)
else
break
end
nUseCount = nUseCount + count
end
local nMaxCount = 0
local nCurToken = PlayerData.StarTowerAutoPlan:GetTokenCount()
for i = 1, self.nUseCount do
nMaxCount = i
nCurToken = nCurToken + self.mapItemData.nTokenValue
if nCurToken >= self._panel.nMaxToken then
break
end
end
if nMaxCount < self.nUseCount then
local sTip = ConfigTable.GetUIText("Energy_Use_Tip_2")
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = sTip,
bBlur = false
})
return
end
if nil ~= next(itemList) then
local msgCallback = function()
local nCountTemp = self.mapItemData.nTokenValue * self.nUseCount * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
local nRatio = math.floor(nCountTemp)
EventManager.Hit(EventId.OpenMessageBox, orderedFormat(ConfigTable.GetUIText("TokenBuy_Success"), nRatio))
EventManager.Hit("CloseTokenBuyPanel")
EventManager.Hit("RefreshTokenItemList")
end
PlayerData.Item:SendUseItemMsg(itemList, msgCallback)
end
end
function StarTowerTokenBuyItemUseCtrl:OnBtnClick_Item(btn)
local mapData = {
nTid = self.mapItemData.nTid,
bShowDepot = true,
bShowJumpto = false
}
EventManager.Hit(EventId.OpenPanel, PanelId.ItemTips, btn.transform, mapData)
end
return StarTowerTokenBuyItemUseCtrl