Files
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

290 lines
9.5 KiB
Lua

local EnergyBuyMainCtrl = class("EnergyBuyMainCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
EnergyBuyMainCtrl._mapNodeConfig = {
goWindow = {},
animWindow = {sNodeName = "goWindow", sComponentName = "Animator"},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Buy_Title"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
goBatteryEnergy = {},
goBuyItem = {},
txtBuyName = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Buy_Desc"
},
txtBatteryEnergy = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Battery_Title"
},
txtBatteryValue = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Left"
},
txtBatteryValueNumber = {sComponentName = "TMP_Text"},
txtBuyLimit = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Buy_Limit"
},
txtBuyLimitValue = {sComponentName = "TMP_Text"},
imgEnergyBg = {},
txtBuyCount = {sComponentName = "TMP_Text"},
btnBuy = {
sComponentName = "UIButton",
callback = "OnBtnClick_Buy"
},
btnUseBattery = {
sComponentName = "UIButton",
callback = "OnBtnClick_UseBattery"
},
btnBuyGray = {
sComponentName = "UIButton",
callback = "OnBtnClick_BuyGray"
},
btnBatteryGray = {
sComponentName = "UIButton",
callback = "OnBtnClick_UseBatteryGray"
},
txtBuyButton = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Btn_Text"
},
txtBuyButtonGray = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Btn_Text"
},
imgBuyCoin = {sComponentName = "Image"},
txtBuyCost = {sComponentName = "TMP_Text"},
goItemContent = {sComponentName = "Transform"},
rtItemContent = {
sNodeName = "goItemContent",
sComponentName = "RectTransform"
},
goItem = {},
goItemList = {
sComponentName = "RectTransform"
}
}
EnergyBuyMainCtrl._mapEventConfig = {
[EventId.CoinResChange] = "RefreshEnergyBuy",
RefreshEnergyBuyCount = "RefreshEnergyBuy",
RefreshEnergyItemList = "RefreshEnergyItem",
[EventId.IsNewDay] = "OnEventNewDay",
[EventId.UpdateEnergyBattery] = "RefreshEnergyBattery"
}
function EnergyBuyMainCtrl:Awake()
end
function EnergyBuyMainCtrl:OnEnable()
self.tbItemCtrl = {}
end
function EnergyBuyMainCtrl:OnDisable()
for _, v in ipairs(self.tbItemCtrl) do
local obj = v.gameObject
self:UnbindCtrlByNode(v)
destroy(obj)
end
self.tbItemCtrl = {}
end
function EnergyBuyMainCtrl:OnDestroy()
end
function EnergyBuyMainCtrl:ShowPanel()
local nEnergyBatteryMax = ConfigTable.GetConfigNumber("EnergyBatteryMax")
self._mapNode.goBatteryEnergy.gameObject:SetActive(0 < nEnergyBatteryMax)
self._mapNode.goItem.gameObject:SetActive(false)
self._mapNode.animWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self:RefreshEnergyBuy()
self:RefreshEnergyItem()
end
function EnergyBuyMainCtrl:OnEventNewDay()
self:RefreshEnergyBuy()
end
function EnergyBuyMainCtrl:RefreshEnergyBattery()
local nCurEnergyBattery = PlayerData.Base:GetCurEnergyBattery().nEnergyBattery
NovaAPI.SetTMPText(self._mapNode.txtBatteryValueNumber, string.format("%s/%s", nCurEnergyBattery, ConfigTable.GetConfigNumber("EnergyBatteryMax")))
self._mapNode.btnBatteryGray.gameObject:SetActive(nCurEnergyBattery <= 0)
self._mapNode.btnUseBattery.gameObject:SetActive(0 < nCurEnergyBattery)
end
function EnergyBuyMainCtrl:RefreshEnergyBuy()
local nCurBuyCount = PlayerData.Base:GetEnergyBuyCount()
local nBuyCountLimit = PlayerData.Base:GetEnergyBuyLimit()
local nCurEnergyBattery = PlayerData.Base:GetCurEnergyBattery().nEnergyBattery
NovaAPI.SetTMPText(self._mapNode.txtBuyLimitValue, string.format("%s/%s", nBuyCountLimit - nCurBuyCount, nBuyCountLimit))
NovaAPI.SetTMPText(self._mapNode.txtBatteryValueNumber, string.format("%s/%s", nCurEnergyBattery, ConfigTable.GetConfigNumber("EnergyBatteryMax")))
self._mapNode.btnBuyGray.gameObject:SetActive(nCurBuyCount >= nBuyCountLimit)
self._mapNode.btnBatteryGray.gameObject:SetActive(nCurEnergyBattery <= 0)
self._mapNode.btnUseBattery.gameObject:SetActive(0 < nCurEnergyBattery)
self._mapNode.btnBuy.gameObject:SetActive(nCurBuyCount < nBuyCountLimit)
self._mapNode.imgEnergyBg.gameObject:SetActive(nCurBuyCount < nBuyCountLimit)
if nCurBuyCount < nBuyCountLimit then
local mapBuyEnergyCfg = ConfigTable.GetData("EnergyBuy", nCurBuyCount + 1)
if nil ~= mapBuyEnergyCfg then
self:SetSprite_Coin(self._mapNode.imgBuyCoin, mapBuyEnergyCfg.CurrencyItemId)
NovaAPI.SetTMPText(self._mapNode.txtBuyCost, mapBuyEnergyCfg.CurrencyItemQty)
NovaAPI.SetTMPText(self._mapNode.txtBuyCount, "+" .. mapBuyEnergyCfg.EnergyValue)
local hasCount = PlayerData.Coin:GetCoinCount(mapBuyEnergyCfg.CurrencyItemId)
NovaAPI.SetTMPColor(self._mapNode.txtBuyCost, hasCount < mapBuyEnergyCfg.CurrencyItemQty and Red_Unable or Blue_Normal)
end
end
end
function EnergyBuyMainCtrl:RefreshEnergyItem()
self.tbItems = {}
local tbItems = PlayerData.Item:GetItemsByStype(GameEnum.itemStype.EnergyItem)
local curTime = CS.ClientManager.Instance.serverTimeStamp
local tbResident = {}
tbResident[81003] = false
tbResident[81004] = false
for _, v in ipairs(tbItems) do
local itemCfg = ConfigTable.GetData_Item(v.Tid)
if nil ~= itemCfg then
local useCfg = decodeJson(itemCfg.UseArgs)
local nEnergyValue = 0
for itemId, count in pairs(useCfg) do
local checkItemCfg = ConfigTable.GetData_Item(tonumber(itemId))
if nil ~= checkItemCfg and checkItemCfg.Stype == GameEnum.itemStype.Energy then
nEnergyValue = count
else
printLog(string.format("体力道具使用参数配置错误!!!请检查!itemId = [%s]", v.Tid))
end
end
if 0 < nEnergyValue then
for nExpire, mapExpiresData in pairs(v.mapExpires) do
if 0 < nExpire and 0 < nExpire - curTime or nExpire == 0 then
local mapItem = {
nTid = v.Tid,
mapId = mapExpiresData.mapId,
nExpire = nExpire,
nTimeLimit = 0 < nExpire and 1 or 0,
nCount = mapExpiresData.nTotalCount,
nEnergyValue = nEnergyValue,
nSort = 0
}
table.insert(self.tbItems, mapItem)
if nil ~= tbResident[v.Tid] then
tbResident[v.Tid] = true
end
end
end
end
end
end
for id, bHas in pairs(tbResident) do
if not bHas then
local itemCfg = ConfigTable.GetData_Item(id)
if nil ~= itemCfg then
local useCfg = decodeJson(itemCfg.UseArgs)
local nEnergyValue = 0
for itemId, count in pairs(useCfg) do
local checkItemCfg = ConfigTable.GetData_Item(tonumber(itemId))
if nil ~= checkItemCfg and checkItemCfg.Stype == GameEnum.itemStype.Energy then
nEnergyValue = count
else
printLog(string.format("体力道具使用参数配置错误!!!请检查!itemId = [%s]", id))
end
end
local mapItem = {
nTid = id,
mapId = 0,
nExpire = 0,
nTimeLimit = 0,
nCount = 0,
nEnergyValue = nEnergyValue,
nSort = -1
}
table.insert(self.tbItems, mapItem)
end
end
end
table.sort(self.tbItems, function(a, b)
if a.nSort == b.nSort then
if a.nTimeLimit == b.nTimeLimit then
if a.nExpire == b.nExpire then
return a.nTid < b.nTid
end
return a.nExpire < b.nExpire
end
return a.nTimeLimit > b.nTimeLimit
end
return a.nSort > b.nSort
end)
for _, v in ipairs(self.tbItemCtrl) do
v.gameObject:SetActive(false)
end
for k, v in ipairs(self.tbItems) do
if nil == self.tbItemCtrl[k] then
local obj = instantiate(self._mapNode.goItem, self._mapNode.goItemList)
obj.gameObject:SetActive(true)
local objCtrl = self:BindCtrlByNode(obj, "Game.UI.EnergyBuy.EnergyBuyItemCtrl")
objCtrl:SetItem(v)
self.tbItemCtrl[k] = objCtrl
else
self.tbItemCtrl[k].gameObject:SetActive(true)
self.tbItemCtrl[k]:SetItem(v)
end
end
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtItemContent)
end
function EnergyBuyMainCtrl:Close()
self._mapNode.animWindow:Play("t_window_04_t_out")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function EnergyBuyMainCtrl:OnBtnClick_Close()
EventManager.Hit("CloseEnergyBuyPanel")
end
function EnergyBuyMainCtrl:OnBtnClick_Buy()
local nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
if nCurEnergy >= self._panel.nMaxEnergy then
local sTip = ConfigTable.GetUIText("Energy_Use_Tip_2")
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = sTip
})
return
end
EventManager.Hit("ChangeEnergyBuyPanel", AllEnum.EnergyPanelType.BuyConfirm)
end
function EnergyBuyMainCtrl:OnBtnClick_BuyGray()
local sTip = ConfigTable.GetUIText("Energy_Use_Tip_3")
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
bPositive = true,
sContent = sTip
})
end
function EnergyBuyMainCtrl:OnBtnClick_UseBattery()
local nBatteryEnergy = PlayerData.Base:GetCurEnergyBattery().nEnergyBattery
if nBatteryEnergy <= 0 then
local sTip = ConfigTable.GetUIText("Energy_Use_Tip_6")
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = sTip
})
return
end
local nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
if nCurEnergy >= self._panel.nMaxEnergy then
local sTip = ConfigTable.GetUIText("Energy_Use_Tip_2")
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = sTip
})
return
end
EventManager.Hit("ChangeEnergyBuyPanel", AllEnum.EnergyPanelType.BatteryUse)
end
function EnergyBuyMainCtrl:OnBtnClick_UseBatteryGray()
local sTip = ConfigTable.GetUIText("Energy_Use_Tip_1")
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
bPositive = true,
sContent = sTip
})
end
return EnergyBuyMainCtrl