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
This commit is contained in:
@@ -0,0 +1,213 @@
|
||||
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
|
||||
Reference in New Issue
Block a user