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,231 @@
|
||||
local FriendPortraitCtrl = class("FriendPortraitCtrl", BaseCtrl)
|
||||
FriendPortraitCtrl._mapNodeConfig = {
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_CharShowTitle"
|
||||
},
|
||||
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"
|
||||
},
|
||||
svChar = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
svSkin = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
snapSkin = {
|
||||
sNodeName = "svSkin",
|
||||
sComponentName = "LoopScrollSnap",
|
||||
callback = "OnGridSelect_Skin"
|
||||
},
|
||||
btnNext = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Next"
|
||||
},
|
||||
btnPre = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Pre"
|
||||
},
|
||||
txtSkinName = {sComponentName = "TMP_Text"},
|
||||
goPoint = {},
|
||||
trPoint = {sComponentName = "Transform"}
|
||||
}
|
||||
FriendPortraitCtrl._mapEventConfig = {}
|
||||
function FriendPortraitCtrl:Open()
|
||||
self:Refresh()
|
||||
self:PlayInAni()
|
||||
end
|
||||
function FriendPortraitCtrl:Refresh()
|
||||
self.nCurSkinId = PlayerData.Base:GetPlayerShowSkin()
|
||||
self.nCurCharId = ConfigTable.GetData_CharacterSkin(self.nCurSkinId).CharId
|
||||
local tbAllChar = PlayerData.Char:GetDataForCharList()
|
||||
self.tbChar = {}
|
||||
for _, v in pairs(tbAllChar) do
|
||||
if self.nCurCharId ~= v.nId then
|
||||
table.insert(self.tbChar, v)
|
||||
end
|
||||
end
|
||||
table.sort(self.tbChar, function(a, b)
|
||||
return a.Rare < b.Rare or a.Rare == b.Rare and a.nId < b.nId
|
||||
end)
|
||||
table.insert(self.tbChar, 1, tbAllChar[self.nCurCharId])
|
||||
for k, v in pairs(self.tbChar) do
|
||||
if v.nId == self.nCurCharId then
|
||||
self.nSelectIndex = k
|
||||
end
|
||||
end
|
||||
local nAllCount = #self.tbChar
|
||||
self._mapNode.svChar:Init(nAllCount, self, self.OnGridRefresh, self.OnGridBtnClick)
|
||||
self:SelectDefaultChar()
|
||||
end
|
||||
function FriendPortraitCtrl:SelectDefaultChar()
|
||||
local mapData = self.tbChar[self.nSelectIndex]
|
||||
self:RefreshSkin(mapData.nId)
|
||||
end
|
||||
function FriendPortraitCtrl:OnGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapData = self.tbChar[nIndex]
|
||||
local imgCur1 = goGrid.transform:Find("btnGrid/AnimRoot/imgCur1").gameObject
|
||||
local imgCur2 = goGrid.transform:Find("btnGrid/AnimRoot/imgCur2").gameObject
|
||||
local imgSelect = goGrid.transform:Find("btnGrid/AnimRoot/imgSelect").gameObject
|
||||
local txtCharName = goGrid.transform:Find("btnGrid/AnimRoot/txtCharName"):GetComponent("TMP_Text")
|
||||
local txtCur = goGrid.transform:Find("btnGrid/AnimRoot/imgCur2/txtCur"):GetComponent("TMP_Text")
|
||||
local imgCharIcon = goGrid.transform:Find("btnGrid/AnimRoot/tc_char_03/imgIconBg/imgCharIcon"):GetComponent("Image")
|
||||
local imgFrame = goGrid.transform:Find("btnGrid/AnimRoot/tc_char_03/imgFrame"):GetComponent("Image")
|
||||
local mapCharCfg = ConfigTable.GetData_Character(mapData.nId)
|
||||
local nSkinId = mapCharCfg.DefaultSkinId
|
||||
local mapSkinCfg = ConfigTable.GetData_CharacterSkin(nSkinId)
|
||||
local rareIconName = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapData.Rare]
|
||||
NovaAPI.SetTMPText(txtCur, ConfigTable.GetUIText("Friend_CurSelect"))
|
||||
NovaAPI.SetTMPText(txtCharName, mapData.Name)
|
||||
self:SetPngSprite(imgCharIcon, mapSkinCfg.Icon .. AllEnum.CharHeadIconSurfix.XXL)
|
||||
self:SetAtlasSprite(imgFrame, "12_rare", rareIconName)
|
||||
imgSelect:SetActive(self.nSelectIndex == nIndex)
|
||||
imgCur1:SetActive(mapData.nId == self.nCurCharId)
|
||||
imgCur2:SetActive(mapData.nId == self.nCurCharId)
|
||||
end
|
||||
function FriendPortraitCtrl:OnGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
if self.nSelectIndex == nIndex then
|
||||
return
|
||||
end
|
||||
local mapData = self.tbChar[nIndex]
|
||||
if self.nSelectIndex then
|
||||
local goSelect = self._mapNode.svChar.transform:Find("Viewport/Content/" .. self.nSelectIndex - 1)
|
||||
if goSelect then
|
||||
local imgSelect = goSelect.transform:Find("btnGrid/AnimRoot/imgSelect").gameObject
|
||||
imgSelect:SetActive(false)
|
||||
end
|
||||
end
|
||||
local imgSelect = goGrid.transform:Find("btnGrid/AnimRoot/imgSelect").gameObject
|
||||
imgSelect:SetActive(true)
|
||||
self.nSelectIndex = nIndex
|
||||
self:RefreshSkin(mapData.nId)
|
||||
end
|
||||
function FriendPortraitCtrl:RefreshSkin(nCharId)
|
||||
local tbSkinList = PlayerData.CharSkin:GetSkinListByCharacterId(nCharId)
|
||||
self.tbSortSkinList = {}
|
||||
for _, v in pairs(tbSkinList) do
|
||||
if true == v:CheckUnlock() then
|
||||
table.insert(self.tbSortSkinList, v)
|
||||
end
|
||||
end
|
||||
table.sort(self.tbSortSkinList, function(a, b)
|
||||
return a:GetId() < b:GetId()
|
||||
end)
|
||||
self.nSkinIndex = 1
|
||||
for k, v in pairs(self.tbSortSkinList) do
|
||||
if v:GetId() == self.nCurSkinId then
|
||||
self.nSkinIndex = k
|
||||
end
|
||||
end
|
||||
self.nSkinCount = #self.tbSortSkinList
|
||||
self._mapNode.svSkin:Init(self.nSkinCount, self, self.OnSkinGridRefresh)
|
||||
self._mapNode.svSkin:SetScrollGridPos(self.nSkinIndex - 1, 0)
|
||||
self.tbPoint = {}
|
||||
delChildren(self._mapNode.trPoint)
|
||||
for i = 1, self.nSkinCount do
|
||||
local obj = instantiate(self._mapNode.goPoint, self._mapNode.trPoint)
|
||||
local on = obj.transform:Find("imgPointOn").gameObject
|
||||
local off = obj.transform:Find("imgPointOff").gameObject
|
||||
on:SetActive(self.nSkinIndex == i)
|
||||
off:SetActive(self.nSkinIndex ~= i)
|
||||
obj:SetActive(true)
|
||||
table.insert(self.tbPoint, obj)
|
||||
end
|
||||
self:SelectDefaultSkin()
|
||||
end
|
||||
function FriendPortraitCtrl:SelectDefaultSkin()
|
||||
local mapData = self.tbSortSkinList[self.nSkinIndex]
|
||||
local mapCfg = mapData:GetCfgData()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtSkinName, mapCfg.Name)
|
||||
self._mapNode.btnPre.gameObject:SetActive(self.nSkinIndex > 1)
|
||||
self._mapNode.btnNext.gameObject:SetActive(self.nSkinIndex < self.nSkinCount)
|
||||
end
|
||||
function FriendPortraitCtrl:OnSkinGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapData = self.tbSortSkinList[nIndex]
|
||||
local imgSkin = goGrid.transform:Find("btnGrid/AnimRoot/imgSkin"):GetComponent("Image")
|
||||
local mapCfg = mapData:GetCfgData()
|
||||
self:SetPngSprite(imgSkin, mapCfg.Icon .. AllEnum.CharHeadIconSurfix.SK)
|
||||
end
|
||||
function FriendPortraitCtrl:PlayInAni()
|
||||
self.gameObject:SetActive(true)
|
||||
self.ani:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
end
|
||||
function FriendPortraitCtrl:PlayOutAni()
|
||||
self.ani:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.2, "Close", true, true, true)
|
||||
end
|
||||
function FriendPortraitCtrl:Close()
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function FriendPortraitCtrl:Awake()
|
||||
self.ani = self.gameObject.transform:GetComponent("Animator")
|
||||
self.nSelectIndex = 1
|
||||
self.nSkinIndex = 1
|
||||
end
|
||||
function FriendPortraitCtrl:OnEnable()
|
||||
end
|
||||
function FriendPortraitCtrl:OnDisable()
|
||||
end
|
||||
function FriendPortraitCtrl:OnDestroy()
|
||||
end
|
||||
function FriendPortraitCtrl:OnBtnClick_Cancel(btn)
|
||||
EventManager.Hit("FriendClosePop")
|
||||
end
|
||||
function FriendPortraitCtrl:OnBtnClick_Confirm(btn)
|
||||
local callback = function()
|
||||
EventManager.Hit("FriendClosePop")
|
||||
EventManager.Hit("FriendRefreshActor")
|
||||
end
|
||||
PlayerData.Base:SendPlayerSkinShowReq(self.tbSortSkinList[self.nSkinIndex]:GetId(), callback)
|
||||
end
|
||||
function FriendPortraitCtrl:OnGridSelect_Skin(_, goGrid)
|
||||
local nIndex = tonumber(goGrid.name) + 1
|
||||
local goBefore = self.tbPoint[self.nSkinIndex]
|
||||
goBefore.transform:Find("imgPointOn").gameObject:SetActive(false)
|
||||
goBefore.transform:Find("imgPointOff").gameObject:SetActive(true)
|
||||
self.nSkinIndex = nIndex
|
||||
local goCur = self.tbPoint[self.nSkinIndex]
|
||||
goCur.transform:Find("imgPointOn").gameObject:SetActive(true)
|
||||
goCur.transform:Find("imgPointOff").gameObject:SetActive(false)
|
||||
local mapData = self.tbSortSkinList[nIndex]
|
||||
local mapCfg = mapData:GetCfgData()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtSkinName, mapCfg.Name)
|
||||
self._mapNode.btnPre.gameObject:SetActive(1 < self.nSkinIndex)
|
||||
self._mapNode.btnNext.gameObject:SetActive(self.nSkinIndex < self.nSkinCount)
|
||||
end
|
||||
function FriendPortraitCtrl:OnBtnClick_Next(btn)
|
||||
if self.nSkinIndex + 1 > self.nSkinCount then
|
||||
return
|
||||
end
|
||||
local nPos = self.nSkinIndex + 1
|
||||
self._mapNode.svSkin:SetScrollGridPos(nPos - 1, 0.5)
|
||||
end
|
||||
function FriendPortraitCtrl:OnBtnClick_Pre(btn)
|
||||
if self.nSkinIndex - 1 < 1 then
|
||||
return
|
||||
end
|
||||
local nPos = self.nSkinIndex - 1
|
||||
self._mapNode.svSkin:SetScrollGridPos(nPos - 1, 0.5)
|
||||
end
|
||||
return FriendPortraitCtrl
|
||||
Reference in New Issue
Block a user