5e0d58cfad
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
300 lines
9.1 KiB
Lua
300 lines
9.1 KiB
Lua
local DepotFateCardCtrl = class("DepotFateCardCtrl", BaseCtrl)
|
|
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
|
DepotFateCardCtrl._mapNodeConfig = {
|
|
rtItemListContent = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
goFateCardItem = {},
|
|
goDepotItem = {},
|
|
goItemList = {},
|
|
FateCardList = {
|
|
sNodeName = "FateCardList_",
|
|
nCount = 5
|
|
},
|
|
txtFateCard = {
|
|
sComponentName = "TMP_Text",
|
|
nCount = 5,
|
|
sNodeName = "txtFateCard_"
|
|
},
|
|
txtHas = {
|
|
sComponentName = "TMP_Text",
|
|
nCount = 5,
|
|
sNodeName = "txtHas_"
|
|
},
|
|
txtAll = {
|
|
sComponentName = "TMP_Text",
|
|
nCount = 5,
|
|
sNodeName = "txtAll_"
|
|
},
|
|
imgPackageIcon = {
|
|
sComponentName = "Image",
|
|
nCount = 5,
|
|
sNodeName = "imgPackageIcon_"
|
|
},
|
|
imgSubIcon = {
|
|
sComponentName = "Image",
|
|
nCount = 5,
|
|
sNodeName = "imgSubIcon_"
|
|
},
|
|
rtFateCard = {
|
|
sComponentName = "Transform",
|
|
nCount = 5,
|
|
sNodeName = "rtFateCard_"
|
|
},
|
|
ItemInfo = {
|
|
sNodeName = "---ItemInfo---"
|
|
},
|
|
goItemL = {
|
|
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
|
},
|
|
txtItemName = {sComponentName = "TMP_Text"},
|
|
txtCountCn = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "StarTower_Depot_Info_QTY"
|
|
},
|
|
txtItemCount = {sComponentName = "TMP_Text"},
|
|
txtDescribeTitle1 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "StarTower_Depot_Info_Desc"
|
|
},
|
|
txtItemDesc = {sComponentName = "TMP_Text"},
|
|
Content = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
FateCardInfo = {
|
|
sNodeName = "---FateCardInfo---"
|
|
},
|
|
goFateCardInfo = {
|
|
sCtrlName = "Game.UI.VampireSurvivor.Depot.DepotFateCardItemCtrl"
|
|
},
|
|
txtFateCardName = {sComponentName = "TMP_Text"},
|
|
imgEffect = {nCount = 3},
|
|
txtEffect1 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "VampireDepot_ReminTime"
|
|
},
|
|
txtEffect2 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "VampireDepot_ReminTime_None"
|
|
},
|
|
txtEffect3 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "StarTower_FateCard_Unable"
|
|
},
|
|
txtEffectCount = {sComponentName = "TMP_Text"},
|
|
txtDescribeTitle2 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Depot_Describe"
|
|
},
|
|
txtFateCardDesc = {sComponentName = "TMP_Text"},
|
|
imgEmpty = {},
|
|
txt_EmptyTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "StarTower_Item_List_Empty"
|
|
}
|
|
}
|
|
DepotFateCardCtrl._mapEventConfig = {}
|
|
DepotFateCardCtrl._mapRedDotConfig = {}
|
|
local item_type = {FateCard = 1, Item = 2}
|
|
function DepotFateCardCtrl:InitPackage(nLevelId)
|
|
self.nLevelId = nLevelId
|
|
local mapLevelData = ConfigTable.GetData("VampireSurvivor", nLevelId)
|
|
if mapLevelData == nil then
|
|
return
|
|
end
|
|
local tbBundle = mapLevelData.FateCardBundle
|
|
self.tbBundle = clone(tbBundle)
|
|
self.tbExFateCard = decodeJson(mapLevelData.SpeciaFateCard)
|
|
if self.tbExFateCard == nil then
|
|
self.tbExFateCard = {}
|
|
end
|
|
for i = 1, 5 do
|
|
if self.tbBundle[i] == nil then
|
|
self._mapNode.FateCardList[i].gameObject:SetActive(false)
|
|
else
|
|
local mapBundleCfgData = ConfigTable.GetData("StarTowerBookFateCardBundle", self.tbBundle[i])
|
|
self.tbFateCardCtrl[i] = {}
|
|
if mapBundleCfgData ~= nil then
|
|
NovaAPI.SetTMPText(self._mapNode.txtFateCard[i], mapBundleCfgData.Name)
|
|
self:SetPngSprite(self._mapNode.imgPackageIcon[i], mapBundleCfgData.Icon .. AllEnum.FateCardBundleIcon.S)
|
|
self:SetAtlasSprite(self._mapNode.imgSubIcon[i], "05_language", mapBundleCfgData.Text)
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgSubIcon[i])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function DepotFateCardCtrl:RefreshFateCard(mapFateCard)
|
|
self.mapFateCard = {}
|
|
for nId, v in pairs(mapFateCard) do
|
|
local mapBundleCfgData = ConfigTable.GetData("StarTowerBookFateCard", nId)
|
|
local nBundleIdx = 0
|
|
local bEx = false
|
|
if mapBundleCfgData ~= nil then
|
|
local nBundleId = mapBundleCfgData.BundleId
|
|
nBundleIdx = table.indexof(self.tbBundle, nBundleId)
|
|
end
|
|
if nBundleIdx < 1 then
|
|
bEx, nBundleIdx = self:isExFateCard(nId)
|
|
end
|
|
if 5 < nBundleIdx or nBundleIdx < 1 then
|
|
printError("无法获取Bundle索引")
|
|
nBundleIdx = 1
|
|
end
|
|
table.insert(self.mapFateCard, {
|
|
nTid = nId,
|
|
nCount = v,
|
|
bEx = bEx,
|
|
nBundleIdx = nBundleIdx
|
|
})
|
|
end
|
|
local tbCount = {
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
}
|
|
if #self.mapFateCard == 0 then
|
|
self._mapNode.ItemInfo.gameObject:SetActive(false)
|
|
self._mapNode.FateCardInfo.gameObject:SetActive(false)
|
|
self._mapNode.imgEmpty:SetActive(true)
|
|
self._mapNode.goItemList:SetActive(false)
|
|
return
|
|
end
|
|
self._mapNode.imgEmpty:SetActive(false)
|
|
self._mapNode.goItemList:SetActive(true)
|
|
table.sort(self.mapFateCard, function(a, b)
|
|
if a.nBundleIdx ~= b.nBundleIdx then
|
|
return a.nBundleIdx < b.nBundleIdx
|
|
end
|
|
if a.nCount * b.nCount == 0 and a.nCount + b.nCount ~= 0 then
|
|
return a.nCount ~= 0
|
|
end
|
|
if a.bEx ~= b.bEx then
|
|
return a.bEx
|
|
end
|
|
return a.nTid < b.nTid
|
|
end)
|
|
local nFirstId = 0
|
|
if #self.mapFateCard > 0 then
|
|
nFirstId = self.mapFateCard[1].nTid
|
|
end
|
|
for _, tbItemCtrl in ipairs(self.tbFateCardCtrl) do
|
|
for _, v in ipairs(tbItemCtrl) do
|
|
v.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
for k, v in ipairs(self.mapFateCard) do
|
|
local itemObj
|
|
local nBundleIdx = v.nBundleIdx
|
|
local bEx = v.bEx
|
|
tbCount[nBundleIdx] = tbCount[nBundleIdx] + 1
|
|
if nil == self.tbFateCardCtrl[nBundleIdx] then
|
|
self.tbFateCardCtrl[nBundleIdx] = {}
|
|
end
|
|
local nIdx = tbCount[nBundleIdx]
|
|
if self.tbFateCardCtrl[nBundleIdx][nIdx] == nil then
|
|
itemObj = instantiate(self._mapNode.goFateCardItem, self._mapNode.rtFateCard[nBundleIdx])
|
|
itemObj.gameObject:SetActive(true)
|
|
local itemCtrl = self:BindCtrlByNode(itemObj, "Game.UI.VampireSurvivor.Depot.DepotFateCardItemCtrl")
|
|
itemCtrl:InitFateCard(v.nTid, v.nCount, bEx)
|
|
table.insert(self.tbFateCardCtrl[nBundleIdx], itemCtrl)
|
|
else
|
|
itemObj = self.tbFateCardCtrl[nBundleIdx][nIdx].gameObject
|
|
itemObj:SetActive(true)
|
|
self.tbFateCardCtrl[nBundleIdx][nIdx]:InitFateCard(v.nTid, v.nCount)
|
|
end
|
|
local btnSelect = itemObj.transform:Find("btnItem"):GetComponent("UIButton")
|
|
btnSelect.onClick:RemoveAllListeners()
|
|
local func_select = function()
|
|
self:SelectItem(item_type.FateCard, nBundleIdx, nIdx, k)
|
|
end
|
|
btnSelect.onClick:AddListener(func_select)
|
|
if nFirstId == v.nTid then
|
|
self:SelectItem(item_type.FateCard, nBundleIdx, nIdx, k)
|
|
end
|
|
end
|
|
for nIdx, tbItem in pairs(self.tbFateCardCtrl) do
|
|
self._mapNode.FateCardList[nIdx]:SetActive(0 < tbCount[nIdx])
|
|
NovaAPI.SetTMPText(self._mapNode.txtHas[nIdx], tbCount[nIdx])
|
|
end
|
|
end
|
|
function DepotFateCardCtrl:SelectItem(nType, nBundleIdx, nIndex, nIdx)
|
|
self._mapNode.ItemInfo.gameObject:SetActive(false)
|
|
self._mapNode.FateCardInfo.gameObject:SetActive(false)
|
|
if nil ~= self.nSelectIndex and self.nSelectType == item_type.FateCard then
|
|
self.tbFateCardCtrl[self.nSelectBundleIdx][self.nSelectIndex]:SetChoose(false)
|
|
end
|
|
self.nSelectType = nType
|
|
self.nSelectBundleIdx = nBundleIdx
|
|
self.nSelectIndex = nIndex
|
|
if self.nSelectType == item_type.FateCard then
|
|
self._mapNode.FateCardInfo.gameObject:SetActive(true)
|
|
self.tbFateCardCtrl[self.nSelectBundleIdx][self.nSelectIndex]:SetChoose(true)
|
|
self:SetFateCardInfo(nIdx)
|
|
end
|
|
end
|
|
function DepotFateCardCtrl:SetItemInfo()
|
|
local mapSelect = self.mapItem[self.nSelectIndex]
|
|
local mapCfg = ConfigTable.GetData_Item(mapSelect.nTid)
|
|
self._mapNode.goItemL:SetItem(mapSelect.nTid)
|
|
NovaAPI.SetTMPText(self._mapNode.txtItemCount, mapSelect.nCount)
|
|
if mapCfg ~= nil then
|
|
NovaAPI.SetTMPText(self._mapNode.txtItemName, mapCfg.Title)
|
|
NovaAPI.SetTMPText(self._mapNode.txtItemDesc, mapCfg.Desc)
|
|
end
|
|
end
|
|
function DepotFateCardCtrl:SetFateCardInfo(nIdx)
|
|
local mapSelect = self.mapFateCard[nIdx]
|
|
if nil ~= mapSelect then
|
|
local itemCfg = ConfigTable.GetData_Item(mapSelect.nTid)
|
|
local fateCardCfg = ConfigTable.GetData("FateCard", mapSelect.nTid)
|
|
if nil == fateCardCfg then
|
|
printError(string.format("获取FateCard表格配置失败!!!id = [%s]", mapSelect.nTid))
|
|
return
|
|
end
|
|
NovaAPI.SetTMPText(self._mapNode.txtFateCardName, fateCardCfg.Name)
|
|
local sDesc = UTILS.ParseParamDesc(fateCardCfg.Desc2, fateCardCfg)
|
|
NovaAPI.SetTMPText(self._mapNode.txtFateCardDesc, sDesc)
|
|
self._mapNode.goFateCardInfo:InitFateCard(mapSelect.nTid, mapSelect.nCount, false)
|
|
for _, v in ipairs(self._mapNode.imgEffect) do
|
|
v.gameObject:SetActive(false)
|
|
end
|
|
if mapSelect.nCount == 0 then
|
|
self._mapNode.imgEffect[3].gameObject:SetActive(true)
|
|
elseif mapSelect.nCount < 0 then
|
|
self._mapNode.imgEffect[2].gameObject:SetActive(true)
|
|
else
|
|
self._mapNode.imgEffect[1].gameObject:SetActive(true)
|
|
NovaAPI.SetTMPText(self._mapNode.txtEffectCount, orderedFormat(ConfigTable.GetUIText("VampireDepot_ReminTime_Sec"), mapSelect.nCount))
|
|
end
|
|
end
|
|
end
|
|
function DepotFateCardCtrl:Awake()
|
|
self.tbFateCardCtrl = {}
|
|
self.nSelectIndex = nil
|
|
self.nSelectType = 0
|
|
self._mapNode.goFateCardItem.gameObject:SetActive(false)
|
|
self._mapNode.goDepotItem.gameObject:SetActive(false)
|
|
end
|
|
function DepotFateCardCtrl:ClearFateCard()
|
|
for _, tbItemCtrl in ipairs(self.tbFateCardCtrl) do
|
|
for _, v in ipairs(tbItemCtrl) do
|
|
self:UnbindCtrlByNode(v)
|
|
end
|
|
end
|
|
self.tbFateCardCtrl = {}
|
|
end
|
|
function DepotFateCardCtrl:OnDestroy()
|
|
self:ClearFateCard()
|
|
end
|
|
function DepotFateCardCtrl:isExFateCard(nFateCardId)
|
|
for i, tbExFateCard in ipairs(self.tbExFateCard) do
|
|
if table.indexof(tbExFateCard, nFateCardId) > 0 then
|
|
return true, i
|
|
end
|
|
end
|
|
return false, 0
|
|
end
|
|
return DepotFateCardCtrl
|