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,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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user