Files
SL1900 46f967a584 Update - 1.6.0.84
EN: 1.6.0.84
CN: 1.6.0.87
JP: 1.6.0.88
KR: 1.6.0.91
2026-02-04 13:00:00 +09:00

234 lines
8.0 KiB
Lua

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)
if mapSkinCfg then
self:SetPngSprite(imgCharIcon, mapSkinCfg.Icon .. AllEnum.CharHeadIconSurfix.XXL)
end
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