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:
SL1900
2025-12-03 01:00:00 +09:00
commit 5e0d58cfad
3595 changed files with 9373562 additions and 0 deletions
+153
View File
@@ -0,0 +1,153 @@
local BuildBriefItem = class("BuildBriefItem", BaseCtrl)
local PanelState = {
Normal = 1,
Delete = 2,
Preference = 3
}
BuildBriefItem._mapNodeConfig = {
img_SelectDelete = {},
img_SelectPreference = {},
btn_LockIcon = {sComponentName = "Button"},
btn_grid = {
sComponentName = "UIButton",
callback = "OnBtnClick_Grid"
},
btn_Lock = {
sComponentName = "UIButton",
callback = "OnBtnClick_Lock"
},
btn_Preference = {
sComponentName = "Button",
callback = "OnBtnClick_Preference"
},
imgRareFrame = {sComponentName = "Image"},
imgRareScore = {sComponentName = "Image"},
txtBuildName = {sComponentName = "TMP_Text"},
imgLike = {},
txtLeaderCn = {
sComponentName = "TMP_Text",
sLanguageId = "Build_Leader"
},
txtSubCn = {sComponentName = "TMP_Text", sLanguageId = "Build_Sub"},
imgCharIcon = {nCount = 3, sComponentName = "Image"},
imgCharFrame = {nCount = 3, sComponentName = "Image"},
txtCharCount = {nCount = 3, sComponentName = "TMP_Text"},
imgTheme = {nCount = 4, sComponentName = "Image"},
imgMask = {nCount = 4, sComponentName = "Image"},
txtThemeCount = {nCount = 4, sComponentName = "TMP_Text"},
imgEnhance = {nCount = 4},
btnExport = {sComponentName = "UIButton"}
}
BuildBriefItem._mapEventConfig = {}
function BuildBriefItem:RefreshGrid(mapData, nPanelState, bSelectDelete, bCheckOut, bCheckIn)
self._mapData = mapData
self:RefreshInfo()
self:RefreshChar()
self:RefreshPerk()
if nPanelState == PanelState.Delete then
self._mapNode.img_SelectDelete:SetActive(bSelectDelete)
self._mapNode.img_SelectPreference:SetActive(false)
elseif nPanelState == PanelState.Preference then
if bCheckOut then
self._mapNode.img_SelectPreference:SetActive(false)
elseif bCheckIn then
self._mapNode.img_SelectPreference:SetActive(true)
else
self._mapNode.img_SelectPreference:SetActive(mapData.bPreference)
end
self._mapNode.img_SelectDelete:SetActive(false)
else
self._mapNode.img_SelectPreference:SetActive(false)
self._mapNode.img_SelectDelete:SetActive(false)
end
self._mapNode.btnExport.gameObject:SetActive(false)
EventManager.Hit("BuildItemExport", self._mapNode.btnExport, self._mapData.nBuildId)
end
function BuildBriefItem:RefreshInfo()
local sScore = AllEnum.FrameType_New.BuildRank .. self._mapData.mapRank.Id
self:SetAtlasSprite(self._mapNode.imgRareScore, "12_rare", sScore)
if self._mapData.sName == "" or self._mapData.sName == nil then
NovaAPI.SetTMPText(self._mapNode.txtBuildName, ConfigTable.GetUIText("RoguelikeBuild_EmptyBuildName"))
else
NovaAPI.SetTMPText(self._mapNode.txtBuildName, self._mapData.sName)
end
self._mapNode.imgLike:SetActive(self._mapData.bPreference)
self._mapNode.btn_LockIcon.interactable = self._mapData.bLock
end
function BuildBriefItem:RefreshChar()
for i = 1, 3 do
local nCharTid = self._mapData.tbChar[i].nTid
local nCharSkinId = PlayerData.Char:GetCharSkinId(nCharTid)
local mapCharSkin = ConfigTable.GetData_CharacterSkin(nCharSkinId)
local mapCharCfg = ConfigTable.GetData_Character(nCharTid)
local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapCharCfg.Grade]
self:SetPngSprite(self._mapNode.imgCharIcon[i], mapCharSkin.Icon .. AllEnum.CharHeadIconSurfix.XXL)
self:SetAtlasSprite(self._mapNode.imgCharFrame[i], "12_rare", sFrame)
end
end
function BuildBriefItem:RefreshPerk()
for i = 1, 3 do
NovaAPI.SetTMPText(self._mapNode.txtCharCount[i], self._mapData.tbChar[i].nExclusiveCount)
end
table.sort(self._mapData.tbTheme, function(a, b)
if a.Count ~= b.Count then
return a.Count > b.Count
elseif a.Strengthen ~= b.Strengthen then
return a.Strengthen and not b.Strengthen
else
return a.Theme < b.Theme
end
end)
for i = 1, 4 do
local nTheme = self._mapData.tbTheme[i].Theme
local mapTheme = ConfigTable.GetData("PresentsTheme", nTheme)
if self._mapData.tbTheme[i].Count > 0 then
NovaAPI.SetTMPText(self._mapNode.txtThemeCount[i], self._mapData.tbTheme[i].Count)
self._mapNode.imgMask[i].gameObject:SetActive(false)
else
NovaAPI.SetTMPText(self._mapNode.txtThemeCount[i], 0)
self:SetPngSprite(self._mapNode.imgMask[i], mapTheme.ThemeItemIcon)
self._mapNode.imgMask[i].gameObject:SetActive(true)
end
self:SetPngSprite(self._mapNode.imgTheme[i], mapTheme.ThemeItemIcon)
self._mapNode.imgEnhance[i]:SetActive(self._mapData.tbTheme[i].Strengthen)
end
end
function BuildBriefItem:Init(parentCtrl)
self._parentCtrl = parentCtrl
end
function BuildBriefItem:SetLockState(bLock)
self._mapNode.btn_LockIcon.interactable = bLock
end
function BuildBriefItem:SetPreferenceState(bPreference)
self._mapNode.imgLike:SetActive(bPreference)
end
function BuildBriefItem:SetSelectDeleteState(bSelect)
self._mapNode.img_SelectDelete:SetActive(bSelect)
end
function BuildBriefItem:SetSelectPreferenceState(bSelect)
self._mapNode.img_SelectPreference:SetActive(bSelect)
end
function BuildBriefItem:Awake()
end
function BuildBriefItem:OnEnable()
end
function BuildBriefItem:OnDisable()
end
function BuildBriefItem:OnDestroy()
end
function BuildBriefItem:OnRelease()
end
function BuildBriefItem:OnBtnClick_Grid(btn)
local nIndex = tonumber(self.gameObject.name) + 1
self._parentCtrl:OnBtnClickGrid(nIndex, self)
end
function BuildBriefItem:OnBtnClick_Lock(btn)
local nIndex = tonumber(self.gameObject.name) + 1
self._parentCtrl:OnBuildGridLock(nIndex, self)
end
function BuildBriefItem:OnBtnClick_Preference(btn)
local nIndex = tonumber(self.gameObject.name) + 1
self._parentCtrl:OnBuildGridPreference(nIndex, self)
end
return BuildBriefItem
@@ -0,0 +1,170 @@
local BuildDetailCtrl = class("BuildDetailCtrl", BaseCtrl)
BuildDetailCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
TMPBuildSaveTime = {sComponentName = "TMP_Text"},
btnRename = {
sComponentName = "UIButton",
callback = "OnBtnClick_Rename"
},
btn_Preference = {
sComponentName = "UIButton",
callback = "OnBtnClick_Preference"
},
btn_PreferenceIcon = {sComponentName = "Button"},
txtLike = {
sComponentName = "TMP_Text",
sLanguageId = "Build_Btn_Like"
},
txtBuildLock = {sComponentName = "TMP_Text"},
btnDeleteBuild = {
sComponentName = "UIButton",
callback = "OnBtnClick_DeleteBuild"
},
txt_Delete = {
sComponentName = "TMP_Text",
sLanguageId = "RoguelikeBuild_Manage_Delete"
},
btn_Lock = {
sComponentName = "UIButton",
callback = "OnBtnClick_Lock"
},
btn_LockIcon = {sComponentName = "Button"},
ani_root = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "Animator"
},
BuildDetail = {
sCtrlName = "Game.UI.BuildPanelEx.BuildDetailItemCtrl"
},
btnCharInfo = {
nCount = 3,
sComponentName = "UIButton",
callback = "OnBtnClick_CharInfo"
},
txtBtnChar = {
nCount = 3,
sComponentName = "TMP_Text",
sLanguageId = "Build_Btn_Char"
},
PerkList = {
sCtrlName = "Game.UI.BuildPanelEx.BuildPerkCtrl"
}
}
BuildDetailCtrl._mapEventConfig = {
BuildThemeSelect = "OnEvent_ThemeSelect",
BuildExclusiveSelect = "OnEvent_ExclusiveSelect"
}
function BuildDetailCtrl:InitPanel()
if not self.mapBuild.bDetail then
print("build数据错误 无详细数据")
return
end
self._mapNode.BuildDetail:Refresh(self.mapBuild)
self._mapNode.PerkList:Refresh(self.mapBuild)
self._mapNode.btn_PreferenceIcon.interactable = self.mapBuild.bPreference
NovaAPI.SetTMPColor(self._mapNode.txtLike, self.mapBuild.bPreference and Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764) or Color(0.5803921568627451, 0.6666666666666666, 0.7529411764705882))
self._mapNode.btn_LockIcon.interactable = self.mapBuild.bLock
NovaAPI.SetTMPText(self._mapNode.txtBuildLock, self.mapBuild.bLock and ConfigTable.GetUIText("RoguelikeBuild_Save_Lock") or ConfigTable.GetUIText("RoguelikeBuild_Save_Unlock"))
NovaAPI.SetTMPColor(self._mapNode.txtBuildLock, self.mapBuild.bLock and Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764) or Color(0.5803921568627451, 0.6666666666666666, 0.7529411764705882))
NovaAPI.SetTMPText(self._mapNode.TMPBuildSaveTime, string.format("<color=#5e89b4>保存时间:</color>%s", os.date("%Y/%m/%d %H:%M", math.floor(self.mapBuild.nBuildId / 1.0E9))))
end
function BuildDetailCtrl:OpenConfirmHint()
local nCoin = math.floor(math.min(math.max(self.mapBuild.nScore / tonumber(self.tbCoinRate[1]), tonumber(self.tbCoinRate[2])), tonumber(self.tbCoinRate[3])))
local CheckCallback = function()
local sTip = ""
if self.mapBuild.mapRank.Rarity == GameEnum.itemRarity.SSR then
sTip = ConfigTable.GetUIText("BUILD_07")
else
sTip = ConfigTable.GetUIText("BUILD_10")
end
local msg = {
nType = AllEnum.MessageBox.Item,
sContent = sTip,
tbItem = {
[1] = {
nTid = AllEnum.CoinItemId.FRRewardCurrency,
nCount = nCoin
}
},
callbackConfirm = function()
local tbDelete = {
self.mapBuild.nBuildId
}
local callback = function()
EventManager.Hit(EventId.CloesCurPanel)
end
PlayerData.Build:DeleteBuild(tbDelete, callback)
end
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
PlayerData.Build:CheckCoinMax(nCoin, CheckCallback)
end
function BuildDetailCtrl:Awake()
self.tbCoinRate = ConfigTable.GetConfigArray("StarTowerBuildTransformParas")
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.mapBuild = tbParam[1]
end
self:InitPanel()
end
function BuildDetailCtrl:OnEnable()
end
function BuildDetailCtrl:OnDisable()
end
function BuildDetailCtrl:OnDestroy()
end
function BuildDetailCtrl:OnRelease()
end
function BuildDetailCtrl:OnBtnClick_Preference(btn)
local tbPreferenceCheckIn = {}
local tbPreferenceCheckOut = {}
local callback = function()
self._mapNode.btn_PreferenceIcon.interactable = self.mapBuild.bPreference
NovaAPI.SetTMPColor(self._mapNode.txtLike, self.mapBuild.bPreference and Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764) or Color(0.5803921568627451, 0.6666666666666666, 0.7529411764705882))
end
if self.mapBuild.bPreference then
table.insert(tbPreferenceCheckOut, self.mapBuild.nBuildId)
else
table.insert(tbPreferenceCheckIn, self.mapBuild.nBuildId)
end
PlayerData.Build:SetBuildPreference(tbPreferenceCheckIn, tbPreferenceCheckOut, callback)
end
function BuildDetailCtrl:OnBtnClick_Lock(btn)
local callback = function()
self._mapNode.btn_LockIcon.interactable = self.mapBuild.bLock
NovaAPI.SetTMPText(self._mapNode.txtBuildLock, self.mapBuild.bLock and ConfigTable.GetUIText("RoguelikeBuild_Save_Lock") or ConfigTable.GetUIText("RoguelikeBuild_Save_Unlock"))
NovaAPI.SetTMPColor(self._mapNode.txtBuildLock, self.mapBuild.bLock and Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764) or Color(0.5803921568627451, 0.6666666666666666, 0.7529411764705882))
end
PlayerData.Build:ChangeBuildLock(self.mapBuild.nBuildId, not self.mapBuild.bLock, callback)
end
function BuildDetailCtrl:OnBtnClick_DeleteBuild(btn)
if self.mapBuild.bLock then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BUILD_01"))
return
end
self:OpenConfirmHint()
end
function BuildDetailCtrl:OnBtnClick_Rename(btn)
local callback = function(sName)
self._mapNode.BuildDetail:SetName(sName)
end
EventManager.Hit(EventId.OpenPanel, PanelId.BuildRename, self.mapBuild, callback)
end
function BuildDetailCtrl:OnBtnClick_CharInfo(btn, nIndex)
local nCharTid = self.mapBuild.tbChar[nIndex].nTid
local tbChar = {
self.mapBuild.tbChar[1].nTid,
self.mapBuild.tbChar[2].nTid,
self.mapBuild.tbChar[3].nTid
}
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, nCharTid, tbChar)
end
function BuildDetailCtrl:OnEvent_ThemeSelect(rtSelect)
end
function BuildDetailCtrl:OnEvent_ExclusiveSelect(rtSelect)
end
return BuildDetailCtrl
@@ -0,0 +1,49 @@
local BuildDetailItemCtrl = class("BuildDetailItemCtrl", BaseCtrl)
BuildDetailItemCtrl._mapNodeConfig = {
imgRareFrame = {sComponentName = "Image"},
imgRareScore = {sComponentName = "Image"},
txtBuildName = {sComponentName = "TMP_Text"},
txtScore = {sComponentName = "TMP_Text"},
txtScoreCn = {
sComponentName = "TMP_Text",
sLanguageId = "Build_Score"
},
txtLeaderCn = {
sComponentName = "TMP_Text",
sLanguageId = "Build_Leader"
},
txtSubCn = {sComponentName = "TMP_Text", sLanguageId = "Build_Sub"},
imgCharIcon = {nCount = 3, sComponentName = "Image"},
imgCharFrame = {nCount = 3, sComponentName = "Image"}
}
BuildDetailItemCtrl._mapEventConfig = {}
function BuildDetailItemCtrl:Refresh(mapData)
self.mapBuild = mapData
self:RefreshInfo()
self:RefreshChar()
end
function BuildDetailItemCtrl:RefreshInfo()
local sScore = AllEnum.FrameType_New.BuildRank .. self.mapBuild.mapRank.Id
self:SetAtlasSprite(self._mapNode.imgRareScore, "12_rare", sScore)
NovaAPI.SetTMPText(self._mapNode.txtScore, self.mapBuild.nScore)
if self.mapBuild.sName == "" or self.mapBuild.sName == nil then
NovaAPI.SetTMPText(self._mapNode.txtBuildName, ConfigTable.GetUIText("RoguelikeBuild_EmptyBuildName"))
else
NovaAPI.SetTMPText(self._mapNode.txtBuildName, self.mapBuild.sName)
end
end
function BuildDetailItemCtrl:RefreshChar()
for i = 1, 3 do
local nCharTid = self.mapBuild.tbChar[i].nTid
local nCharSkinId = PlayerData.Char:GetCharSkinId(nCharTid)
local mapCharSkin = ConfigTable.GetData_CharacterSkin(nCharSkinId)
local mapCharCfg = ConfigTable.GetData_Character(nCharTid)
local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapCharCfg.Grade]
self:SetPngSprite(self._mapNode.imgCharIcon[i], mapCharSkin.Icon .. AllEnum.CharHeadIconSurfix.XXL)
self:SetAtlasSprite(self._mapNode.imgCharFrame[i], "12_rare", sFrame)
end
end
function BuildDetailItemCtrl:SetName(sName)
NovaAPI.SetTMPText(self._mapNode.txtBuildName, sName)
end
return BuildDetailItemCtrl
@@ -0,0 +1,18 @@
local BuildDetailPanel = class("BuildDetailPanel", BasePanel)
BuildDetailPanel._tbDefine = {
{
sPrefabPath = "RoguelikeBuildEX/RoguelikeBuildDetailPanel.prefab",
sCtrlName = "Game.UI.BuildPanelEx.BuildDetailCtrl"
}
}
function BuildDetailPanel:Awake()
end
function BuildDetailPanel:OnEnable()
end
function BuildDetailPanel:OnDisable()
end
function BuildDetailPanel:OnDestroy()
end
function BuildDetailPanel:OnRelease()
end
return BuildDetailPanel
@@ -0,0 +1,111 @@
local BuildExclusiveCtrl = class("BuildExclusiveCtrl", BaseCtrl)
BuildExclusiveCtrl._mapNodeConfig = {
rtPerk = {sComponentName = "Transform"},
imgHead = {sComponentName = "Image"},
imgHeadFrame = {sComponentName = "Image"},
goPerk = {},
txtCharName = {sComponentName = "TMP_Text"},
txtHas = {sComponentName = "TMP_Text"},
goSpecialOn = {
nCount = 2,
sCtrlName = "Game.UI.TemplateEx.TemplateSpecialExclusiveItemCtrl"
},
btnSpecialOn = {
nCount = 2,
sNodeName = "goSpecialOn",
sComponentName = "UIButton",
callback = "OnBtnClick_SpecialOn"
},
imgNone = {nCount = 2}
}
BuildExclusiveCtrl._mapEventConfig = {}
function BuildExclusiveCtrl:Refresh(nCharId, tbPerk)
self:RefreshChar(nCharId)
self:RefreshNormal(tbPerk)
self:RefreshSpecial(tbPerk)
NovaAPI.SetTMPText(self._mapNode.txtHas, #tbPerk)
end
function BuildExclusiveCtrl:RefreshChar(nCharId)
local nCharSkinId = PlayerData.Char:GetCharSkinId(nCharId)
local mapCharSkin = ConfigTable.GetData_CharacterSkin(nCharSkinId)
local mapCharCfg = ConfigTable.GetData_Character(nCharId)
local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapCharCfg.Grade]
self:SetPngSprite(self._mapNode.imgHead, mapCharSkin.Icon .. AllEnum.CharHeadIconSurfix.XXL)
self:SetAtlasSprite(self._mapNode.imgHeadFrame, "12_rare", sFrame)
NovaAPI.SetTMPText(self._mapNode.txtCharName, mapCharCfg.Name)
end
function BuildExclusiveCtrl:RefreshSpecial(tbPerk)
self.tbSpecial = {}
for _, v in pairs(tbPerk) do
local mapCfg = ConfigTable.GetData_Perk(v.nTid)
if mapCfg.PerkType == GameEnum.perkType.SpecificExclusive then
table.insert(self.tbSpecial, v)
end
end
for i = 1, 2 do
if self.tbSpecial[i] then
self._mapNode.goSpecialOn[i]:SetPerk(self.tbSpecial[i].nTid)
end
self._mapNode.goSpecialOn[i].gameObject:SetActive(self.tbSpecial[i])
self._mapNode.imgNone[i]:SetActive(not self.tbSpecial[i])
end
end
function BuildExclusiveCtrl:RefreshNormal(tbPerk)
self.tbPerk = {}
for _, v in ipairs(tbPerk) do
local mapCfg = ConfigTable.GetData_Perk(v.nTid)
if mapCfg.PerkType == GameEnum.perkType.Exclusive then
table.insert(self.tbPerk, v)
end
end
local nAllPerk = #self.tbPerk
delChildren(self._mapNode.rtPerk)
self.tbGridCtrl = {}
for i = 1, nAllPerk do
local obj = instantiate(self._mapNode.goPerk, self._mapNode.rtPerk)
obj.gameObject:SetActive(true)
local ctrl = self:BindCtrlByNode(obj, "Game.UI.TemplateEx.TemplateExclusiveItemCtrl")
table.insert(self.tbGridCtrl, ctrl)
ctrl:SetPerk(self.tbPerk[i].nTid, self.tbPerk[i].nCount - 1, self.tbPerk[i].nMaxLevel - 1)
local btn = obj.transform:GetComponent("UIButton")
local func_Handler = ui_handler(self, self.OnBtnClick_Select, obj, i)
btn.onClick:AddListener(func_Handler)
end
end
function BuildExclusiveCtrl:Awake()
end
function BuildExclusiveCtrl:OnEnable()
self.tbGridCtrl = {}
end
function BuildExclusiveCtrl:OnDisable()
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self.tbGridCtrl = {}
end
function BuildExclusiveCtrl:OnDestroy()
end
function BuildExclusiveCtrl:OnBtnClick_Select(btn, nIndex)
local tip = function()
local mapPanelData = {
nPerkId = self.tbPerk[nIndex].nTid,
nCount = self.tbPerk[nIndex].nCount
}
EventManager.Hit(EventId.OpenPanel, PanelId.PerkTips, btn.transform, mapPanelData)
end
EventManager.Hit("BuildExclusiveSelect", btn.gameObject, 0.1)
self:AddTimer(1, 0.1, tip, true, true, true)
end
function BuildExclusiveCtrl:OnBtnClick_SpecialOn(btn, nIndex)
local tip = function()
local mapPanelData = {
nPerkId = self.tbSpecial[nIndex].nTid,
nCount = self.tbSpecial[nIndex].nCount
}
EventManager.Hit(EventId.OpenPanel, PanelId.PerkTips, btn.transform, mapPanelData)
end
EventManager.Hit("BuildExclusiveSelect", btn.gameObject, 0.1)
self:AddTimer(1, 0.1, tip, true, true, true)
end
return BuildExclusiveCtrl
+213
View File
@@ -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
@@ -0,0 +1,137 @@
local BuildRenameCtrl = class("BuildRenameCtrl", BaseCtrl)
BuildRenameCtrl._mapNodeConfig = {
blur = {
sNodeName = "t_fullscreen_blur_blue"
},
aniBlur = {
sNodeName = "t_fullscreen_blur_blue",
sComponentName = "Animator"
},
aniWindow = {
sNodeName = "---Rename---",
sComponentName = "Animator"
},
goWindow = {
sNodeName = "---Rename---"
},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Friend_Rename"
},
txtOldName = {
sComponentName = "TMP_Text",
sLanguageId = "Build_OldName"
},
txtNameDesc = {
sComponentName = "TMP_Text",
sLanguageId = "Friend_NameDesc"
},
txtCurName = {sComponentName = "TMP_Text"},
inputRename = {
sComponentName = "TMP_InputField"
},
btnBlur = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtnClick_Cancel"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
btnCancel = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
btnConfirm1 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
txtBtnConfirm = {
sComponentName = "TMP_Text",
sLanguageId = "Friend_Btn_Confirm"
},
txtBtnCancel = {
sComponentName = "TMP_Text",
sLanguageId = "Friend_Btn_Cancel"
}
}
BuildRenameCtrl._mapEventConfig = {}
function BuildRenameCtrl:Open()
self:Refresh()
self:PlayInAni()
end
function BuildRenameCtrl:Refresh()
local bInit = NovaAPI.IsDirtyWordsInit()
if not bInit then
NovaAPI.InitDirtyWords()
end
NovaAPI.SetTMPInputFieldText(self._mapNode.inputRename, "")
if self.sCurName ~= nil and self.sCurName ~= "" then
NovaAPI.SetTMPText(self._mapNode.txtCurName, self.sCurName)
elseif self.mapBuild.sName == "" or self.mapBuild.sName == nil then
NovaAPI.SetTMPText(self._mapNode.txtCurName, ConfigTable.GetUIText("RoguelikeBuild_EmptyBuildName"))
else
NovaAPI.SetTMPText(self._mapNode.txtCurName, self.mapBuild.sName)
end
end
function BuildRenameCtrl:PlayInAni()
self._mapNode.goWindow:SetActive(true)
self._mapNode.blur:SetActive(true)
self._mapNode.aniWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function BuildRenameCtrl:PlayOutAni()
self._mapNode.aniWindow:Play("t_window_04_t_out")
self._mapNode.aniBlur:SetTrigger("tOut")
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
self:AddTimer(1, 0.2, "Close", true, true, true)
end
function BuildRenameCtrl:Close()
EventManager.Hit(EventId.ClosePanel, PanelId.BuildRename)
end
function BuildRenameCtrl:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.mapBuild = tbParam[1]
self.callback = tbParam[2]
self.bSkip = tbParam[3]
self.sCurName = tbParam[4]
end
end
function BuildRenameCtrl:OnEnable()
self:Open()
end
function BuildRenameCtrl:OnDisable()
end
function BuildRenameCtrl:OnDestroy()
end
function BuildRenameCtrl:OnBtnClick_Cancel(btn)
self:PlayOutAni()
end
function BuildRenameCtrl:OnBtnClick_Confirm(btn)
local sNewName = NovaAPI.GetTMPInputFieldText(self._mapNode.inputRename)
if sNewName == "" then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BUILD_05"))
return
end
local bInit = NovaAPI.IsDirtyWordsInit()
if not bInit then
NovaAPI.InitDirtyWords()
end
if NovaAPI.IsDirtyString(sNewName) then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("PLAYER_01"))
return
end
if self.bSkip then
self:PlayOutAni()
self.callback(sNewName)
else
local callback = function()
self:PlayOutAni()
self.callback(sNewName)
end
PlayerData.Build:ChangeBuildName(self.mapBuild.nBuildId, sNewName, callback)
end
end
return BuildRenameCtrl
@@ -0,0 +1,17 @@
local BuildRenamePanel = class("BuildRenamePanel", BasePanel)
BuildRenamePanel._bIsMainPanel = false
BuildRenamePanel._tbDefine = {
{
sPrefabPath = "StarTowerBuild/BuildRenamePanel.prefab",
sCtrlName = "Game.UI.BuildPanelEx.BuildRenameCtrl"
}
}
function BuildRenamePanel:Awake()
end
function BuildRenamePanel:OnEnable()
end
function BuildRenamePanel:OnDisable()
end
function BuildRenamePanel:OnDestroy()
end
return BuildRenamePanel
+240
View File
@@ -0,0 +1,240 @@
local BuildSaveCtrl = class("BuildSaveCtrl", BaseCtrl)
BuildSaveCtrl._mapNodeConfig = {
btnRename = {
sComponentName = "UIButton",
callback = "OnBtnClick_Rename"
},
img_BottomBar = {},
btn_Preference = {
sComponentName = "UIButton",
callback = "OnBtnClick_Preference"
},
btn_PreferenceIcon = {sComponentName = "Button"},
btn_Delete = {
sComponentName = "UIButton",
callback = "OnBtnClick_DeleteBuild"
},
btn_Save = {
sComponentName = "UIButton",
callback = "OnBtnClick_SaveBuild"
},
btn_Lock = {
sComponentName = "UIButton",
callback = "OnBtnClick_Lock"
},
txtBuildLock = {sComponentName = "TMP_Text"},
txt_Delete = {
sComponentName = "TMP_Text",
sLanguageId = "Build_Btn_Del"
},
txt_Save = {
sComponentName = "TMP_Text",
sLanguageId = "Build_Btn_Save"
},
btn_LockIcon = {sComponentName = "Button"},
txtLike = {
sComponentName = "TMP_Text",
sLanguageId = "Build_Btn_Like"
},
Mask = {
sComponentName = "CanvasGroup"
},
goDeleteResult = {},
txt_DeleteResultHintItemCount = {sComponentName = "Text"},
txt_DeleteResultTitle = {
sComponentName = "Text",
sLanguageId = "RoguelikeBuild_Common_HintTitle"
},
txt_DeleteResult = {sComponentName = "Text", sLanguageId = "BUILD_08"},
btn_DeleteResultClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_DeleteResult"
},
btn_DeleteResultConfirm = {
sComponentName = "UIButton",
callback = "OnBtnClick_DeleteResult"
},
txt_btnDeleteResultConfirm = {
sComponentName = "Text",
sLanguageId = "RoguelikeBuild_Common_BtnConfirm"
},
goBg = {sNodeName = "---BG---"},
goblur = {
sNodeName = "t_fullscreen_blur_black"
},
goBuildContent = {},
goBonus = {
sCtrlName = "Game.UI.BuildPanelEx.RogueBonusCtrl"
},
BuildDetail = {
sCtrlName = "Game.UI.BuildPanelEx.BuildDetailItemCtrl"
},
PerkList = {
sCtrlName = "Game.UI.BuildPanelEx.BuildPerkCtrl"
}
}
BuildSaveCtrl._mapEventConfig = {}
function BuildSaveCtrl:InitPanel()
self._mapNode.BuildDetail:Refresh(self.mapBuild)
self._mapNode.PerkList:Refresh(self.mapBuild)
self.bLock = self.mapBuild.bLock
self._mapNode.btn_LockIcon.interactable = self.bLock
NovaAPI.SetTMPText(self._mapNode.txtBuildLock, self.bLock and ConfigTable.GetUIText("RoguelikeBuild_Save_Lock") or ConfigTable.GetUIText("RoguelikeBuild_Save_Unlock"))
NovaAPI.SetTMPColor(self._mapNode.txtBuildLock, self.bLock and Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764) or Color(0.5803921568627451, 0.6666666666666666, 0.7529411764705882))
end
function BuildSaveCtrl:InitPanelDelete()
self._mapNode.goBuildContent:SetActive(false)
self._mapNode.goBg:SetActive(false)
local wait1 = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
end
local wait2 = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
NovaAPI.SetText(self._mapNode.txt_DeleteResultHintItemCount, self.mapBuild)
self._mapNode.goDeleteResult:SetActive(true)
end
cs_coroutine.start(wait1)
cs_coroutine.start(wait2)
end
function BuildSaveCtrl:OpenConfirmHint()
local nCoin = math.floor(math.min(math.max(self.mapBuild.nScore / tonumber(self.tbCoinRate[1]), tonumber(self.tbCoinRate[2])), tonumber(self.tbCoinRate[3])))
local sTip = ""
if self.mapBuild.mapRank.Rarity == GameEnum.itemRarity.SSR then
sTip = ConfigTable.GetUIText("BUILD_07")
else
sTip = ConfigTable.GetUIText("BUILD_10")
end
local msg = {
nType = AllEnum.MessageBox.Item,
sContent = sTip,
tbItem = {
[1] = {
nTid = AllEnum.CoinItemId.FRRewardCurrency,
nCount = nCoin
}
},
callbackConfirm = function()
local callback = function(mapChangeInfo)
UTILS.OpenReceiveByChangeInfo(mapChangeInfo, function()
self:ClosePanel()
end)
end
PlayerData.Build:SaveBuild(self.mapBuild.nBuildId, true, self.bLock, self.bPreference, self.sName, callback)
end
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function BuildSaveCtrl:Awake()
self._mapNode.goBuildContent:SetActive(false)
if NovaAPI.GetCurrentModuleName() ~= "MainMenuModuleScene" then
CS.AdventureModuleHelper.PauseLogic()
end
self.tbCoinRate = ConfigTable.GetConfigArray("StarTowerBuildTransformParas")
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.bSuccess = tbParam[1]
self.mapBuild = tbParam[2]
self.tbBonus = tbParam[3]
end
end
function BuildSaveCtrl:OnEnable()
if type(self.mapBuild) == "table" then
self:InitPanel()
else
self:InitPanelDelete()
end
if NovaAPI.GetCurrentModuleName() ~= "MainMenuModuleScene" then
self._mapNode.goBg:SetActive(false)
self._mapNode.goblur:SetActive(true)
else
self._mapNode.goBg:SetActive(true)
self._mapNode.goblur:SetActive(false)
end
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goBuildContent:SetActive(true)
end
cs_coroutine.start(wait)
end
function BuildSaveCtrl:OnDisable()
end
function BuildSaveCtrl:OnDestroy()
end
function BuildSaveCtrl:OnRelease()
end
function BuildSaveCtrl:ClosePanel()
if NovaAPI.GetCurrentModuleName() == "MainMenuModuleScene" then
EventManager.Hit(EventId.CloesCurPanel)
else
CS.AdventureModuleHelper.ResumeLogic()
NovaAPI.SetCanvasGroupAlpha(self._mapNode.Mask, 0)
self._mapNode.Mask.gameObject:SetActive(true)
local sequence = DOTween.Sequence()
sequence:Append(self._mapNode.Mask:DOFade(1, 0.5):SetUpdate(true))
sequence:AppendCallback(function()
if self.bSuccess then
NovaAPI.EnterModule("MainMenuModuleScene", true)
else
local function levelEndCallback()
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
NovaAPI.EnterModule("MainMenuModuleScene", true)
end
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
CS.AdventureModuleHelper.LevelStateChanged(true)
end
end)
sequence:SetUpdate(true)
end
end
function BuildSaveCtrl:OnBtnClick_Preference(btn)
self.bPreference = not self.bPreference
self._mapNode.btn_PreferenceIcon.interactable = self.bPreference
NovaAPI.SetTMPColor(self._mapNode.txtLike, self.bPreference and Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764) or Color(0.5803921568627451, 0.6666666666666666, 0.7529411764705882))
end
function BuildSaveCtrl:OnBtnClick_Lock(btn)
self.bLock = not self.bLock
self._mapNode.btn_LockIcon.interactable = self.bLock
NovaAPI.SetTMPText(self._mapNode.txtBuildLock, self.bLock and ConfigTable.GetUIText("RoguelikeBuild_Save_Lock") or ConfigTable.GetUIText("RoguelikeBuild_Save_Unlock"))
NovaAPI.SetTMPColor(self._mapNode.txtBuildLock, self.bLock and Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764) or Color(0.5803921568627451, 0.6666666666666666, 0.7529411764705882))
end
function BuildSaveCtrl:OnBtnClick_DeleteBuild(btn)
if self.mapBuild.mapRank.Rarity == GameEnum.itemRarity.SSR then
self:OpenConfirmHint()
return
end
local callback = function(mapChangeInfo)
UTILS.OpenReceiveByChangeInfo(mapChangeInfo, function()
self:ClosePanel()
end)
end
PlayerData.Build:SaveBuild(self.mapBuild.nBuildId, true, self.bLock, self.bPreference, self.sName, callback)
end
function BuildSaveCtrl:OnBtnClick_SaveBuild(btn)
local callback = function()
local msg = {
nType = AllEnum.MessageBox.Alert,
sContent = ConfigTable.GetUIText("BUILD_09"),
callbackConfirm = function()
self:ClosePanel()
end
}
EventManager.Hit(EventId.OpenMessageBox, msg)
btn.interactable = true
end
btn.interactable = false
PlayerData.Build:SaveBuild(self.mapBuild.nBuildId, false, self.bLock, self.bPreference, self.sName, callback)
end
function BuildSaveCtrl:OnBtnClick_Rename(btn)
local callback = function(sName)
self._mapNode.BuildDetail:SetName(sName)
self.sName = sName
end
EventManager.Hit(EventId.OpenPanel, PanelId.BuildRename, self.mapBuild, callback, true)
end
function BuildSaveCtrl:OnBtnClick_DeleteResult(btn)
self._mapNode.goDeleteResult:SetActive(false)
self:ClosePanel()
end
return BuildSaveCtrl
@@ -0,0 +1,18 @@
local BuildSavePanel = class("BuildSavePanel", BasePanel)
BuildSavePanel._tbDefine = {
{
sPrefabPath = "RoguelikeBuildEX/RoguelikeBuildSavePanel.prefab",
sCtrlName = "Game.UI.BuildPanelEx.BuildSaveCtrl"
}
}
function BuildSavePanel:Awake()
end
function BuildSavePanel:OnEnable()
end
function BuildSavePanel:OnDisable()
end
function BuildSavePanel:OnDestroy()
end
function BuildSavePanel:OnRelease()
end
return BuildSavePanel
@@ -0,0 +1,65 @@
local BuildThemeCtrl = class("BuildThemeCtrl", BaseCtrl)
BuildThemeCtrl._mapNodeConfig = {
rtPerk = {sComponentName = "Transform"},
imgTheme = {sComponentName = "Image"},
goPerk = {},
txtName = {sComponentName = "TMP_Text"},
txtHas = {sComponentName = "TMP_Text"},
txtAll = {sComponentName = "TMP_Text"}
}
BuildThemeCtrl._mapEventConfig = {}
function BuildThemeCtrl:Refresh(nTheme, tbPerk)
self:RefreshTheme(nTheme)
self:RefreshList(tbPerk)
end
function BuildThemeCtrl:RefreshTheme(nTheme)
local mapTheme = ConfigTable.GetData("PresentsTheme", nTheme)
NovaAPI.SetTMPText(self._mapNode.txtName, mapTheme.ThemeName)
self:SetPngSprite(self._mapNode.imgTheme, mapTheme.ThemeItemIcon)
end
function BuildThemeCtrl:RefreshList(tbPerk)
self.tbPerk = {}
for _, v in pairs(tbPerk) do
table.insert(self.tbPerk, v)
end
local nAllPerk = #self.tbPerk
delChildren(self._mapNode.rtPerk)
self.tbGridCtrl = {}
for i = 1, nAllPerk do
local obj = instantiate(self._mapNode.goPerk, self._mapNode.rtPerk)
obj.gameObject:SetActive(true)
local ctrl = self:BindCtrlByNode(obj, "Game.UI.TemplateEx.TemplatePerkItemCtrl")
table.insert(self.tbGridCtrl, ctrl)
ctrl:SetPerk(self.tbPerk[i].nTid, self.tbPerk[i].nCount - 1, self.tbPerk[i].nMaxLevel - 1)
local btn = obj.transform:GetComponent("UIButton")
local func_Handler = ui_handler(self, self.OnBtnClick_Select, obj, i)
btn.onClick:AddListener(func_Handler)
end
NovaAPI.SetTMPText(self._mapNode.txtHas, nAllPerk)
end
function BuildThemeCtrl:Awake()
end
function BuildThemeCtrl:OnEnable()
self.tbGridCtrl = {}
end
function BuildThemeCtrl:OnDisable()
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self.tbGridCtrl = {}
end
function BuildThemeCtrl:OnDestroy()
end
function BuildThemeCtrl:OnBtnClick_Select(btn, nIndex)
local tip = function()
local mapPanelData = {
nPerkId = self.tbPerk[nIndex].nTid,
nCount = self.tbPerk[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
return BuildThemeCtrl
@@ -0,0 +1,51 @@
local PerkBonusItemCtrl = class("PerkBonusItemCtrl", BaseCtrl)
PerkBonusItemCtrl._mapNodeConfig = {
imgRare = {sComponentName = "Image"},
img_markNew = {},
img_perkIcon = {sComponentName = "Image"},
img_perkLogo = {sComponentName = "Image"},
btn_Star = {sComponentName = "Button", nCount = 5},
txt_perkName = {sComponentName = "Text"},
img_gray = {sComponentName = "Image"},
rt_starContent = {}
}
PerkBonusItemCtrl._mapEventConfig = {}
function PerkBonusItemCtrl:SetGrid(mapInfo)
local mapPerkData = ConfigTable.GetData_Item(mapInfo.nTid)
local mapPerk = ConfigTable.GetData_Perk(mapInfo.nTid)
self:SetIconItem(self._mapNode.img_perkIcon, mapInfo.nTid)
self:SetFrameColorSprite(self._mapNode.imgRare, mapPerkData.Rarity, AllEnum.FrameType_New.Item, true)
NovaAPI.SetText(self._mapNode.txt_perkName, mapPerkData.Title)
if mapPerk.LogoIcon == "" or mapPerk.LogoIcon == nil then
self._mapNode.img_perkLogo.gameObject:SetActive(false)
else
self._mapNode.img_perkLogo.gameObject:SetActive(true)
NovaAPI.SetImageSpriteAsset(self._mapNode.img_perkLogo, self:GetPerkLogo(mapPerk.LogoIcon))
end
self._mapNode.rt_starContent:SetActive(not mapInfo.bOverLimit)
self._mapNode.img_gray.gameObject:SetActive(mapInfo.bOverLimit)
self._mapNode.img_markNew:SetActive(mapInfo.bNew)
if mapInfo.bOverLimit then
return
end
for i = 1, 5 do
self._mapNode.btn_Star[i].interactable = i <= mapInfo.nStar + mapInfo.nNewStar
if i > mapInfo.nStar and i < mapInfo.nNewStar then
NovaAPI.SetImageColor(self._mapNode.btn_Star[i].gameObject:GetComponent("Image"), Color(1, 1, 1, 0.5))
else
NovaAPI.SetImageColor(self._mapNode.btn_Star[i].gameObject:GetComponent("Image"), Color(1, 1, 1, 1))
end
self._mapNode.btn_Star[i].gameObject:SetActive(i <= mapPerk.MaxLevel - 1)
end
end
function PerkBonusItemCtrl:Awake()
end
function PerkBonusItemCtrl:OnEnable()
end
function PerkBonusItemCtrl:OnDisable()
end
function PerkBonusItemCtrl:OnDestroy()
end
function PerkBonusItemCtrl:OnRelease()
end
return PerkBonusItemCtrl
@@ -0,0 +1,55 @@
local RogueBonusCtrl = class("RogueBonusCtrl", BaseCtrl)
RogueBonusCtrl._mapNodeConfig = {
Grid = {
sCtrlName = "Game.UI.BuildPanelEx.PerkBonusItemCtrl",
nCount = 5
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
text_mergeInfo = {
sComponentName = "Text",
sLanguageId = "Bonus_Merge_Hint"
}
}
RogueBonusCtrl._mapEventConfig = {}
function RogueBonusCtrl:OpenPanel(tbPerkInfo)
self._mapNode.text_mergeInfo.gameObject:SetActive(false)
local sort = function(a, b)
if a.bOverLimit ~= b.bOverLimit then
return a.bOverLimit
end
if a.nStar + a.nNewStar ~= b.nStar + b.nNewStar then
return a.nStar + a.nNewStar > b.nStar + b.nNewStar
end
return a.nTid > b.nTid
end
table.sort(tbPerkInfo, sort)
for i = 1, 5 do
if i <= #tbPerkInfo then
if tbPerkInfo[i].bNew and tbPerkInfo[i].nNewStar > 0 then
self._mapNode.text_mergeInfo.gameObject:SetActive(true)
end
self._mapNode.Grid[i].gameObject:SetActive(true)
self._mapNode.Grid[i]:SetGrid(tbPerkInfo[i])
else
self._mapNode.Grid[i].gameObject:SetActive(false)
end
end
self.gameObject:SetActive(true)
end
function RogueBonusCtrl:Awake()
end
function RogueBonusCtrl:OnEnable()
end
function RogueBonusCtrl:OnDisable()
end
function RogueBonusCtrl:OnDestroy()
end
function RogueBonusCtrl:OnRelease()
end
function RogueBonusCtrl:OnBtnClick_Close(btn)
self.gameObject:SetActive(false)
end
return RogueBonusCtrl