5e0d58cfad
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
214 lines
6.3 KiB
Lua
214 lines
6.3 KiB
Lua
local BuildPerkCtrl = class("BuildPerkCtrl", BaseCtrl)
|
|
local _, Gray = ColorUtility.TryParseHtmlString("#A0A9B2")
|
|
BuildPerkCtrl._mapNodeConfig = {
|
|
btnPerk = {
|
|
nCount = 2,
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Tab"
|
|
},
|
|
txtTheme = {
|
|
nCount = 2,
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Perk_Theme"
|
|
},
|
|
txtExclusive = {
|
|
nCount = 2,
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Perk_Exclusive"
|
|
},
|
|
imgOn = {nCount = 2},
|
|
imgOff = {nCount = 2},
|
|
svExclusive = {},
|
|
svTheme = {},
|
|
scExclusive = {
|
|
sNodeName = "svExclusive",
|
|
sComponentName = "UIScrollToClick"
|
|
},
|
|
scTheme = {
|
|
sNodeName = "svTheme",
|
|
sComponentName = "UIScrollToClick"
|
|
},
|
|
ExclusiveList = {
|
|
nCount = 3,
|
|
sCtrlName = "Game.UI.BuildPanelEx.BuildExclusiveCtrl"
|
|
},
|
|
ThemeList = {
|
|
nCount = 4,
|
|
sCtrlName = "Game.UI.BuildPanelEx.BuildThemeCtrl"
|
|
},
|
|
goSlot = {
|
|
nCount = 4,
|
|
sCtrlName = "Game.UI.TemplateEx.TemplatePerkItemCtrl"
|
|
},
|
|
btnSlot = {
|
|
nCount = 4,
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Select"
|
|
},
|
|
imgSlotIcon = {nCount = 4, sComponentName = "Image"},
|
|
txtSlotName = {nCount = 4, sComponentName = "TMP_Text"},
|
|
imgSlotBg = {nCount = 4, sComponentName = "Image"}
|
|
}
|
|
BuildPerkCtrl._mapEventConfig = {
|
|
BuildThemeSelect = "OnEvent_ThemeSelect",
|
|
BuildExclusiveSelect = "OnEvent_ExclusiveSelect"
|
|
}
|
|
function BuildPerkCtrl:Refresh(mapBuild)
|
|
self:RefreshData(mapBuild)
|
|
self:RefreshExclusive()
|
|
self:RefreshSlot()
|
|
self:RefreshTheme()
|
|
self:SetDefaultTab()
|
|
end
|
|
function BuildPerkCtrl:RefreshData(mapBuild)
|
|
self.tbChar = mapBuild.tbChar
|
|
self.tbTheme = mapBuild.tbTheme
|
|
self.tbExclusivePerk = {}
|
|
self.tbThemePerk = {}
|
|
self.tbSlot = {}
|
|
for _, mapPerk in ipairs(mapBuild.tbPerk) do
|
|
local mapCfg = ConfigTable.GetData_Perk(mapPerk.Id)
|
|
local mapAfter = {
|
|
nTid = mapPerk.Id,
|
|
nCount = mapPerk.Qty,
|
|
nMaxLevel = mapPerk.MaxQty
|
|
}
|
|
if mapCfg.Slot and mapCfg.Slot > 0 then
|
|
self.tbSlot[mapCfg.Slot] = mapAfter
|
|
elseif mapCfg.CharId and 0 < mapCfg.CharId then
|
|
if not self.tbExclusivePerk[mapCfg.CharId] then
|
|
self.tbExclusivePerk[mapCfg.CharId] = {}
|
|
end
|
|
table.insert(self.tbExclusivePerk[mapCfg.CharId], mapAfter)
|
|
elseif mapCfg.Theme and 0 < mapCfg.Theme then
|
|
if not self.tbThemePerk[mapCfg.Theme] then
|
|
self.tbThemePerk[mapCfg.Theme] = {}
|
|
end
|
|
table.insert(self.tbThemePerk[mapCfg.Theme], mapAfter)
|
|
end
|
|
end
|
|
end
|
|
local sort = function(a, b)
|
|
local cfgDataA = ConfigTable.GetData_Item(a.nTid)
|
|
local cfgDataB = ConfigTable.GetData_Item(b.nTid)
|
|
if cfgDataA.Rarity ~= cfgDataB.Rarity then
|
|
return cfgDataA.Rarity < cfgDataB.Rarity
|
|
end
|
|
if a.nTid ~= b.nTid then
|
|
return a.nTid < b.nTid
|
|
end
|
|
return a.nCount > b.nCount
|
|
end
|
|
function BuildPerkCtrl:RefreshExclusive()
|
|
for i = 1, 3 do
|
|
local nCharId = self.tbChar[i].nTid
|
|
local tbPerk = self.tbExclusivePerk[nCharId]
|
|
if tbPerk and 0 < #tbPerk then
|
|
table.sort(tbPerk, sort)
|
|
self._mapNode.ExclusiveList[i].gameObject:SetActive(true)
|
|
self._mapNode.ExclusiveList[i]:Refresh(nCharId, tbPerk)
|
|
else
|
|
self._mapNode.ExclusiveList[i].gameObject:SetActive(false)
|
|
end
|
|
end
|
|
end
|
|
function BuildPerkCtrl:RefreshSlot()
|
|
for i = 1, 4 do
|
|
local bHas = self.tbSlot[i] ~= nil
|
|
NovaAPI.SetImageColor(self._mapNode.imgSlotBg[i], bHas and White_Dark or Gray_Dark)
|
|
NovaAPI.SetImageColor(self._mapNode.imgSlotIcon[i], bHas and White_Normal or Gray)
|
|
NovaAPI.SetTMPColor(self._mapNode.txtSlotName[i], bHas and White_Normal or Gray)
|
|
self._mapNode.btnSlot[i].gameObject:SetActive(bHas)
|
|
if bHas then
|
|
self._mapNode.goSlot[i]:SetPerk(self.tbSlot[i].nTid, self.tbSlot[i].nCount - 1, self.tbSlot[i].nMaxLevel - 1)
|
|
self._mapNode.goSlot[i]:SetSelect(self.nSlotSelect == i)
|
|
end
|
|
self:SetAtlasSprite(self._mapNode.imgSlotIcon[i], "10_ico", "zs_vestige_icon_" .. i)
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgSlotIcon[i])
|
|
NovaAPI.SetTMPText(self._mapNode.txtSlotName[i], ConfigTable.GetUIText("Slot_Title_" .. i))
|
|
end
|
|
end
|
|
function BuildPerkCtrl:RefreshTheme()
|
|
local tbDefaultPresents = ConfigTable.GetConfigNumberArray("RglCommonPresentsThemeList")
|
|
local tbDefaultTheme = {}
|
|
for _, v in ipairs(tbDefaultPresents) do
|
|
local mapCfg = ConfigTable.GetData("Presents", v)
|
|
table.insert(tbDefaultTheme, mapCfg.Theme)
|
|
end
|
|
local mapThemePerk = {}
|
|
for i = 1, 4 do
|
|
local nTheme = self.tbTheme[i].Theme
|
|
local tbPerk = self.tbThemePerk[nTheme]
|
|
if tbPerk and 0 < #tbPerk then
|
|
table.insert(mapThemePerk, {
|
|
nTheme = nTheme,
|
|
nCount = #tbPerk,
|
|
bBase = table.indexof(tbDefaultTheme, 0 < nTheme)
|
|
})
|
|
end
|
|
end
|
|
table.sort(mapThemePerk, function(a, b)
|
|
if a.nCount ~= b.nCount then
|
|
return a.nCount > b.nCount
|
|
elseif a.bBase ~= b.bBase then
|
|
return not a.bBase and b.bBase
|
|
else
|
|
return a.nTheme < b.nTheme
|
|
end
|
|
end)
|
|
for i = 1, 4 do
|
|
if mapThemePerk[i] then
|
|
local nTheme = mapThemePerk[i].nTheme
|
|
local tbPerk = self.tbThemePerk[nTheme]
|
|
table.sort(tbPerk, sort)
|
|
self._mapNode.ThemeList[i].gameObject:SetActive(true)
|
|
self._mapNode.ThemeList[i]:Refresh(nTheme, tbPerk)
|
|
else
|
|
self._mapNode.ThemeList[i].gameObject:SetActive(false)
|
|
end
|
|
end
|
|
end
|
|
function BuildPerkCtrl:SetDefaultTab()
|
|
self.nCurTab = 1
|
|
self._mapNode.svExclusive:SetActive(self.nCurTab == 2)
|
|
self._mapNode.svTheme:SetActive(self.nCurTab == 1)
|
|
end
|
|
function BuildPerkCtrl:Awake()
|
|
end
|
|
function BuildPerkCtrl:OnEnable()
|
|
end
|
|
function BuildPerkCtrl:OnDisable()
|
|
end
|
|
function BuildPerkCtrl:OnDestroy()
|
|
end
|
|
function BuildPerkCtrl:OnBtnClick_Tab(btn, nIndex)
|
|
if nIndex == self.nCurTab then
|
|
return
|
|
end
|
|
for i = 1, 2 do
|
|
self._mapNode.imgOn[i]:SetActive(i == nIndex)
|
|
self._mapNode.imgOff[i]:SetActive(i ~= nIndex)
|
|
end
|
|
self.nCurTab = nIndex
|
|
self._mapNode.svExclusive:SetActive(self.nCurTab == 2)
|
|
self._mapNode.svTheme:SetActive(self.nCurTab == 1)
|
|
end
|
|
function BuildPerkCtrl:OnBtnClick_Select(btn, nIndex)
|
|
local tip = function()
|
|
local mapPanelData = {
|
|
nPerkId = self.tbSlot[nIndex].nTid,
|
|
nCount = self.tbSlot[nIndex].nCount
|
|
}
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.PerkTips, btn.transform, mapPanelData)
|
|
end
|
|
EventManager.Hit("BuildThemeSelect", btn.gameObject, 0.1)
|
|
self:AddTimer(1, 0.1, tip, true, true, true)
|
|
end
|
|
function BuildPerkCtrl:OnEvent_ThemeSelect(go, nTime)
|
|
self._mapNode.scTheme:ScrollToClick(go, nTime)
|
|
end
|
|
function BuildPerkCtrl:OnEvent_ExclusiveSelect(go, nTime)
|
|
self._mapNode.scExclusive:ScrollToClick(go, nTime)
|
|
end
|
|
return BuildPerkCtrl
|