Files
StellaSora_DataLua/lua/game/ui/energybuy/energyitemusectrl.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

241 lines
7.5 KiB
Lua

local EnergyItemUseCtrl = class("EnergyItemUseCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
EnergyItemUseCtrl._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"},
txtLeftTime = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Left_Time"
},
txtLeftTimeValue = {sComponentName = "TMP_Text"},
imgLeftTime = {sComponentName = "GameObject", nCount = 3},
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 = "Energy_Buy_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"
}
}
EnergyItemUseCtrl._mapEventConfig = {}
function EnergyItemUseCtrl:Awake()
end
function EnergyItemUseCtrl:OnEnable()
end
function EnergyItemUseCtrl: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 EnergyItemUseCtrl:OnDisable()
end
function EnergyItemUseCtrl:OnDestroy()
end
function EnergyItemUseCtrl: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
NovaAPI.SetTMPText(self._mapNode.txtAddValue, string.format("+%s", self.mapItemData.nEnergyValue))
local nExpire = self.mapItemData.nExpire
self._mapNode.txtLeftTimeValue.gameObject:SetActive(0 < nExpire)
self._mapNode.txtPermanent.gameObject:SetActive(nExpire == 0)
if nExpire ~= 0 then
local sTimeStr = ""
local curTime = CS.ClientManager.Instance.serverTimeStamp
local remainTime = nExpire - curTime
if 86400 <= remainTime then
local day = math.floor(remainTime / 86400)
local hour = math.floor((remainTime - day * 86400) / 3600)
if hour == 0 then
day = day - 1
hour = 24
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Energy_LeftTime_Day"), day, hour)
elseif 3600 <= remainTime then
local hour = math.floor(remainTime / 3600)
local min = math.floor((remainTime - hour * 3600) / 60)
if min == 0 then
hour = hour - 1
min = 60
end
sTimeStr = orderedFormat(ConfigTable.GetUIText("Energy_LeftTime_Hour"), hour, min)
else
sTimeStr = ConfigTable.GetUIText("Energy_LeftTime_LessThenHour")
end
NovaAPI.SetTMPText(self._mapNode.txtLeftTimeValue, sTimeStr)
self._mapNode.imgLeftTime[1]:SetActive(86400 <= remainTime)
self._mapNode.imgLeftTime[2]:SetActive(remainTime < 86400 and 3600 <= remainTime)
self._mapNode.imgLeftTime[3]:SetActive(remainTime < 3600)
end
self.nUseCountLimit = 0
local nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
for i = 1, self.nMaxCount do
nCurEnergy = nCurEnergy + self.mapItemData.nEnergyValue
self.nUseCountLimit = i
if nCurEnergy >= self._panel.nMaxEnergy then
break
end
end
end
function EnergyItemUseCtrl:RefreshAddCount()
local nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
NovaAPI.SetTMPText(self._mapNode.txtBeforeValue, nCurEnergy)
local nAfterValue = nCurEnergy + self.mapItemData.nEnergyValue * self.nUseCount
NovaAPI.SetTMPText(self._mapNode.txtAfterValue, nAfterValue)
self._mapNode.imgArrow.gameObject:SetActive(self.nUseCount > 0)
self._mapNode.txtAfterValue.gameObject:SetActive(self.nUseCount > 0)
self._mapNode.goMaxValue.gameObject:SetActive(nAfterValue >= self._panel.nMaxEnergy)
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCountBg)
end
function EnergyItemUseCtrl:Close()
self._mapNode.animWindow:Play("t_window_04_t_out")
EventManager.Hit("ConsumableUsed")
end
function EnergyItemUseCtrl:OnBtnClick_Close()
EventManager.Hit("CloseEnergyBuyPanel")
end
function EnergyItemUseCtrl:OnBtnClick_Confirm()
if self.nUseCount <= 0 then
return
end
local nExpire = self.mapItemData.nExpire
local curTime = CS.ClientManager.Instance.serverTimeStamp
local remainTime = nExpire - curTime
if remainTime < 0 and 0 < nExpire then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = ConfigTable.GetUIText("Energy_Use_Tip_4")
})
EventManager.Hit("CloseEnergyBuyPanel")
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 nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
for i = 1, self.nUseCount do
nMaxCount = i
nCurEnergy = nCurEnergy + self.mapItemData.nEnergyValue
if nCurEnergy > self._panel.nMaxEnergy 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()
EventManager.Hit(EventId.OpenPanel, PanelId.ReceivePropsTips, {
{
id = AllEnum.CoinItemId.Energy,
count = self.mapItemData.nEnergyValue * self.nUseCount
}
})
EventManager.Hit("CloseEnergyBuyPanel")
EventManager.Hit("RefreshEnergyItemList")
end
PlayerData.Item:SendUseItemMsg(itemList, msgCallback)
end
end
function EnergyItemUseCtrl:OnBtnClick_Item(btn)
local mapData = {
nTid = self.mapItemData.nTid,
bShowDepot = true,
bShowJumpto = false
}
EventManager.Hit(EventId.OpenPanel, PanelId.ItemTips, btn.transform, mapData)
end
return EnergyItemUseCtrl