eafd8f4088
EN: 1.9.0.107 CN: 1.9.0.108 JP: 1.9.0.112 KR: 1.9.0.112
274 lines
8.8 KiB
Lua
274 lines
8.8 KiB
Lua
local ChooseHomePageSkinCtrl = class("ChooseHomePageSkinCtrl", BaseCtrl)
|
|
local PlayerCharSkinData = PlayerData.CharSkin
|
|
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
|
|
local tableInsert = table.insert
|
|
ChooseHomePageSkinCtrl._mapNodeConfig = {
|
|
TopBar = {
|
|
sNodeName = "TopBarPanel",
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
rawImgActor2D = {
|
|
sNodeName = "----Actor2D----",
|
|
sComponentName = "RawImage"
|
|
},
|
|
animRoot = {
|
|
sNodeName = "----SafeAreaRoot----",
|
|
sComponentName = "Animator"
|
|
},
|
|
sv = {
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
trSv = {sNodeName = "sv", sComponentName = "Transform"},
|
|
btnGotoBuy = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_GotoBuy"
|
|
},
|
|
btnUseSkin = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_UseSkin"
|
|
},
|
|
txtBtnUseSkin = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Board_Use_Skin"
|
|
},
|
|
btnGotoAdvance = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_GotoAdvance"
|
|
},
|
|
txtBtnGotoAdvance = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Board_Skin_Advance"
|
|
},
|
|
txtBtnGotoBuy = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Board_Skin_Buy"
|
|
},
|
|
txtSkinEquipped = {sComponentName = "TMP_Text"},
|
|
txtSkinName = {sComponentName = "TMP_Text"},
|
|
goFavorCGLockTip = {},
|
|
txtLockTip = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Board_Skin_CG_Lock"
|
|
},
|
|
imgEquipped = {}
|
|
}
|
|
ChooseHomePageSkinCtrl._mapEventConfig = {
|
|
[EventId.UIBackConfirm] = "OnBtnClick_Back",
|
|
[EventId.UIHomeConfirm] = "OnEvent_Home"
|
|
}
|
|
function ChooseHomePageSkinCtrl:SortSkinList()
|
|
self.tbSortSkinList = {}
|
|
for _, v in pairs(self.tbSkinList) do
|
|
if true == v:CheckSkinShow() or true == v:CheckUnlock() then
|
|
tableInsert(self.tbSortSkinList, v)
|
|
end
|
|
end
|
|
table.sort(self.tbSortSkinList, function(a, b)
|
|
return a:GetId() < b:GetId()
|
|
end)
|
|
end
|
|
function ChooseHomePageSkinCtrl:RefreshSelectSkinInfo()
|
|
local skinData = self.tbSortSkinList[self.nSelectIndex]
|
|
if nil == skinData then
|
|
return
|
|
end
|
|
self._mapNode.goFavorCGLockTip.gameObject:SetActive(false)
|
|
local skinCfg = skinData:GetCfgData()
|
|
self.nSkinId = skinData:GetId()
|
|
NovaAPI.SetTMPText(self._mapNode.txtSkinName, skinCfg.Name)
|
|
self._mapNode.btnGotoBuy.gameObject:SetActive(false)
|
|
self._mapNode.btnGotoAdvance.gameObject:SetActive(false)
|
|
self._mapNode.btnUseSkin.gameObject:SetActive(self.nSkinId ~= self.nUsingSkinId and skinData:CheckUnlock())
|
|
self._mapNode.imgEquipped.gameObject:SetActive(skinData:CheckUnlock() and self.nSkinId == self.nUsingSkinId)
|
|
local bEquipped = self.nSkinId == self.nUsingSkinId and skinData:CheckUnlock()
|
|
local bNotHave = not skinData:CheckUnlock() and self.nSkinId ~= self.nUsingSkinId and skinCfg.SourceDesc ~= nil
|
|
self._mapNode.imgEquipped.gameObject:SetActive(bEquipped or bNotHave)
|
|
if bNotHave then
|
|
local sText = AllEnum.CharSkinSource[skinCfg.SourceDesc]
|
|
if sText ~= nil then
|
|
NovaAPI.SetTMPText(self._mapNode.txtSkinEquipped, ConfigTable.GetUIText(sText))
|
|
else
|
|
self._mapNode.imgEquipped.gameObject:SetActive(false)
|
|
end
|
|
else
|
|
NovaAPI.SetTMPText(self._mapNode.txtSkinEquipped, ConfigTable.GetUIText("Skin_Equipped"))
|
|
end
|
|
self:RefreshActor2D()
|
|
end
|
|
function ChooseHomePageSkinCtrl:RefreshActor2D()
|
|
Actor2DManager.SetActor2D(self:GetPanelId(), self._mapNode.rawImgActor2D, self.nCharId, self.nSkinId)
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnGridRefresh(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
local nInstanceId = goGrid:GetInstanceID()
|
|
if not self.tbGridCtrl[nInstanceId] then
|
|
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.TemplateEx.TemplateSkinCtrl")
|
|
end
|
|
self.tbGridCtrl[nInstanceId]:SetSkinData(self.tbSortSkinList[nIndex], false)
|
|
self.tbGridCtrl[nInstanceId]:RefreshChoseSkin(self.nUsingSkinId)
|
|
if self.nSelectIndex == nIndex then
|
|
self.tbGridCtrl[nInstanceId]:SetSelect(true)
|
|
else
|
|
self.tbGridCtrl[nInstanceId]:SetSelect(false)
|
|
end
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnGridBtnClick(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
local nInstanceId = goGrid:GetInstanceID()
|
|
local goSelect = self._mapNode.trSv:Find("Viewport/Content/" .. self.nSelectIndex - 1)
|
|
if goSelect then
|
|
self.tbGridCtrl[goSelect.gameObject:GetInstanceID()]:SetSelect(false)
|
|
end
|
|
self.tbGridCtrl[nInstanceId]:SetSelect(true)
|
|
self.nSelectIndex = nIndex
|
|
self._mapNode.sv:SetScrollGridPos(nIndex - 1, 0, 0)
|
|
self:RefreshSelectSkinInfo()
|
|
end
|
|
function ChooseHomePageSkinCtrl:ClosePanel()
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.ChooseHomePageSkinPanel)
|
|
end
|
|
function ChooseHomePageSkinCtrl:BackToHome()
|
|
if nil == self.tbTmpSelectList or nil == next(self.tbTmpSelectList) then
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Board_Select_Empty"))
|
|
return
|
|
end
|
|
local sucCallback = function()
|
|
PanelManager.Home()
|
|
end
|
|
PlayerData.Board:SendBoardSet(sucCallback)
|
|
end
|
|
function ChooseHomePageSkinCtrl:Awake()
|
|
self.nSelectIndex = nil
|
|
local param = self:GetPanelParam()
|
|
if type(param) == "table" then
|
|
self.nCharId = param[1]
|
|
self.nUsingSkinId = param[2]
|
|
self.tbTmpSelectList = param[3]
|
|
end
|
|
end
|
|
function ChooseHomePageSkinCtrl:FadeIn()
|
|
self._mapNode.animRoot:Play("ChooseHomePageSkin_in")
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnEnable()
|
|
self.tbGridCtrl = {}
|
|
self.tbSkinList = PlayerCharSkinData:GetSkinListByCharacterId(self.nCharId)
|
|
self:SortSkinList()
|
|
for nIndex = 1, #self.tbSortSkinList do
|
|
if self.nUsingSkinId == self.tbSortSkinList[nIndex]:GetId() then
|
|
self.nSelectIndex = nIndex
|
|
break
|
|
end
|
|
end
|
|
if self.nSelectIndex == nil then
|
|
self.nSelectIndex = 1
|
|
end
|
|
self._mapNode.sv:Init(#self.tbSortSkinList, self, self.OnGridRefresh, self.OnGridBtnClick)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self._mapNode.sv:SetScrollGridPos(self.nSelectIndex - 1, 0, 0)
|
|
self:RefreshSelectSkinInfo()
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
function ChooseHomePageSkinCtrl:FadeOut()
|
|
local nAnimTime = NovaAPI.GetAnimClipLength(self._mapNode.animRoot, {
|
|
"ChooseHomePageSkin_out"
|
|
})
|
|
self._mapNode.animRoot:Play("ChooseHomePageSkin_out")
|
|
return nAnimTime
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnDisable()
|
|
Actor2DManager.UnsetActor2D()
|
|
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
|
self:UnbindCtrlByNode(objCtrl)
|
|
self.tbGridCtrl[nInstanceId] = nil
|
|
end
|
|
self.tbGridCtrl = {}
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnDestroy()
|
|
self.tbSkinList = nil
|
|
self.tbSortSkinList = nil
|
|
self.tbGridCtrl = nil
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnBtnClick_GotoBuy()
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnBtnClick_UseSkin()
|
|
self.nUsingSkinId = self.nSkinId
|
|
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
|
self:UnbindCtrlByNode(objCtrl)
|
|
self.tbGridCtrl[nInstanceId] = nil
|
|
end
|
|
self._mapNode.sv:Init(#self.tbSortSkinList, self, self.OnGridRefresh, self.OnGridBtnClick)
|
|
self._mapNode.sv:SetScrollGridPos(self.nSelectIndex - 1, 0, 0)
|
|
self:RefreshSelectSkinInfo()
|
|
local skinData = self.tbSkinList[self.nUsingSkinId]
|
|
if nil ~= skinData then
|
|
local handbookId = skinData:GetHandbookId()
|
|
PlayerData.Board:ChangeTmpCharSkin(self.nCharId, handbookId)
|
|
end
|
|
Actor2DManager.SetActor2DTypeByPanel(PanelId.MainView, self.nCharId, AllEnum.Actor2DType.Normal)
|
|
self:ClosePanel()
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnBtnClick_GotoAdvance()
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, self.nCharId)
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnBtnClick_Back(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId then
|
|
return
|
|
end
|
|
if self.nUsingSkinId ~= self.nSkinId then
|
|
local skinData = self.tbSortSkinList[self.nSelectIndex]
|
|
if skinData:CheckUnlock() then
|
|
self.nUsingSkinId = self.nSkinId
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = ConfigTable.GetUIText("Board_Change_Skin"),
|
|
callbackConfirm = function()
|
|
local skinData = self.tbSkinList[self.nUsingSkinId]
|
|
if nil ~= skinData then
|
|
local handbookId = skinData:GetHandbookId()
|
|
PlayerData.Board:ChangeTmpCharSkin(self.nCharId, handbookId)
|
|
end
|
|
self:ClosePanel()
|
|
end,
|
|
callbackCancel = function()
|
|
self:ClosePanel()
|
|
end
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
return
|
|
end
|
|
end
|
|
self:ClosePanel()
|
|
end
|
|
function ChooseHomePageSkinCtrl:OnEvent_Home(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId then
|
|
return
|
|
end
|
|
if self.nUsingSkinId ~= self.nSkinId then
|
|
local skinData = self.tbSortSkinList[self.nSelectIndex]
|
|
if skinData:CheckUnlock() then
|
|
self.nUsingSkinId = self.nSkinId
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = ConfigTable.GetUIText("Board_Change_Skin"),
|
|
callbackConfirm = function()
|
|
local skinData = self.tbSkinList[self.nUsingSkinId]
|
|
if nil ~= skinData then
|
|
local handbookId = skinData:GetHandbookId()
|
|
PlayerData.Board:ChangeTmpCharSkin(self.nCharId, handbookId)
|
|
end
|
|
self:BackToHome()
|
|
end,
|
|
callbackCancel = function()
|
|
self:BackToHome()
|
|
end
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
return
|
|
end
|
|
end
|
|
self:BackToHome()
|
|
end
|
|
return ChooseHomePageSkinCtrl
|