eafd8f4088
EN: 1.9.0.107 CN: 1.9.0.108 JP: 1.9.0.112 KR: 1.9.0.112
421 lines
14 KiB
Lua
421 lines
14 KiB
Lua
local FriendHonorTitleCtrl = class("FriendHonorTitleCtrl", BaseCtrl)
|
|
local localdata = require("GameCore.Data.LocalData")
|
|
local RapidJson = require("rapidjson")
|
|
FriendHonorTitleCtrl._mapNodeConfig = {
|
|
btnCancel = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Cancel"
|
|
},
|
|
btnClose = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Cancel"
|
|
},
|
|
btnConfirm1 = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Confirm"
|
|
},
|
|
btnCurHonorTitle = {
|
|
nCount = 3,
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_ChangeHonorTitle"
|
|
},
|
|
goCurHonorTitle = {
|
|
nCount = 3,
|
|
sCtrlName = "Game.UI.FriendEx.HonorTitleCtrl"
|
|
},
|
|
imgSelect = {nCount = 3},
|
|
svHonorTitle = {
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
btnTab = {
|
|
sNodeName = "tab",
|
|
nCount = 4,
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_ChangeHonorTitleType"
|
|
},
|
|
imgTab = {nCount = 4},
|
|
txtTab = {nCount = 4},
|
|
txtTabUnSelect = {nCount = 4},
|
|
imgCurHonorTitleBg = {nCount = 3},
|
|
HonorTitleContent = {},
|
|
txtWindowTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Honor_Title"
|
|
},
|
|
txtBtnCancel = {sComponentName = "TMP_Text", sLanguageId = "BtnCancel"},
|
|
txtBtnConfirm = {sComponentName = "TMP_Text", sLanguageId = "BtnConfirm"},
|
|
txtEquipHonorTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Cur_Honor_Title_Equiped"
|
|
},
|
|
txtTab1 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Honor_Title_All"
|
|
},
|
|
txtTab2 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Honor_Title_Achievement"
|
|
},
|
|
txtTab3 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Honor_Title_Affinity"
|
|
},
|
|
txtTab4 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Honor_Title_Activity"
|
|
},
|
|
txtTabUnSelect1 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Honor_Title_All"
|
|
},
|
|
txtTabUnSelect2 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Honor_Title_Achievement"
|
|
},
|
|
txtTabUnSelect3 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Honor_Title_Affinity"
|
|
},
|
|
txtTabUnSelect4 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Honor_Title_Activity"
|
|
}
|
|
}
|
|
FriendHonorTitleCtrl._mapEventConfig = {}
|
|
local HonorTitleType = {
|
|
All = 1,
|
|
Achievement = 2,
|
|
Affinity = 3,
|
|
Activity = 4
|
|
}
|
|
local L2_LV = 21
|
|
local L3_LV = 41
|
|
function FriendHonorTitleCtrl:Open()
|
|
self:PlayInAni()
|
|
self.tbCurHonorTitle = {}
|
|
self.tbAllHonorData = {}
|
|
self.tbGoChosenState = {}
|
|
self.ownHonorData = PlayerData.Base:GetPlayerHonorTitleList() or {}
|
|
local curHononData = PlayerData.Base:GetPlayerHonorTitle() or {}
|
|
for k, v in ipairs(curHononData) do
|
|
table.insert(self.tbCurHonorTitle, v.Id)
|
|
end
|
|
local allData = ConfigTable.Get("Honor")
|
|
local groupData = {}
|
|
local foreachHonor = function(mapData)
|
|
local bHas = false
|
|
for k, v in pairs(self.ownHonorData) do
|
|
if v.Id == mapData.Id then
|
|
bHas = true
|
|
break
|
|
end
|
|
end
|
|
if mapData.IsUnlock == true or self.ownHonorData ~= nil and bHas then
|
|
if mapData.Type == GameEnum.honorType.Group then
|
|
if groupData[mapData.Params[1]] == nil then
|
|
groupData[mapData.Params[1]] = {}
|
|
end
|
|
table.insert(groupData[mapData.Params[1]], mapData)
|
|
end
|
|
table.insert(self.tbAllHonorData, mapData)
|
|
end
|
|
end
|
|
ForEachTableLine(allData, foreachHonor)
|
|
for _, group in pairs(groupData) do
|
|
local maxPriotity = group[1]
|
|
for k, v in ipairs(group) do
|
|
if v.Priotity > maxPriotity.Priotity then
|
|
table.removebyvalue(self.tbAllHonorData, maxPriotity)
|
|
maxPriotity = v
|
|
end
|
|
end
|
|
end
|
|
self:OnBtnClick_ChangeHonorTitle(nil, 1)
|
|
self:OnBtnClick_ChangeHonorTitleType(nil, 1)
|
|
self:Refresh()
|
|
end
|
|
function FriendHonorTitleCtrl:Refresh()
|
|
self:RefreshHonorTitle()
|
|
self:RefreshHonorTitleList()
|
|
end
|
|
function FriendHonorTitleCtrl:RefreshHonorTitle()
|
|
for i = 1, 3 do
|
|
if self.tbCurHonorTitle[i] ~= nil and self.tbCurHonorTitle[i] ~= 0 then
|
|
local honorData = ConfigTable.GetData("Honor", self.tbCurHonorTitle[i])
|
|
local level
|
|
if honorData.Type == GameEnum.honorType.Character then
|
|
local affinityData = PlayerData.Char:GetCharAffinityData(honorData.Params[1])
|
|
level = affinityData.Level
|
|
elseif honorData.Type == GameEnum.honorType.Levels then
|
|
for k, v in pairs(self.ownHonorData) do
|
|
if v.Id == honorData.Id then
|
|
level = v.Lv or 1
|
|
break
|
|
end
|
|
end
|
|
end
|
|
self._mapNode.goCurHonorTitle[i]:SetHonotTitle(honorData.Id, i == 1, level)
|
|
end
|
|
self._mapNode.goCurHonorTitle[i].gameObject:SetActive(self.tbCurHonorTitle[i] ~= nil and self.tbCurHonorTitle[i] ~= 0)
|
|
self._mapNode.imgCurHonorTitleBg[i]:SetActive(self.tbCurHonorTitle[i] == nil or self.tbCurHonorTitle[i] == 0)
|
|
end
|
|
end
|
|
function FriendHonorTitleCtrl:RefreshHonorTitleList()
|
|
local nCount = 0
|
|
self.tbRefreshDataList = {}
|
|
local tbCachedGroupHonorData = {}
|
|
if self.nSelectedType == HonorTitleType.All then
|
|
nCount = #self.tbAllHonorData
|
|
self.tbRefreshDataList = self.tbAllHonorData
|
|
else
|
|
for k, v in ipairs(self.tbAllHonorData) do
|
|
local data = v
|
|
if data.TabType == GameEnum.honorTabType.Achieve then
|
|
if self.nSelectedType == HonorTitleType.Achievement then
|
|
if tbCachedGroupHonorData[data.Id] ~= nil then
|
|
if tbCachedGroupHonorData[data.Id] < data.Priotity then
|
|
tbCachedGroupHonorData[data.Id] = data.Priotity
|
|
table.insert(self.tbRefreshDataList, v)
|
|
end
|
|
else
|
|
tbCachedGroupHonorData[data.Id] = data.Priotity
|
|
table.insert(self.tbRefreshDataList, v)
|
|
end
|
|
end
|
|
elseif data.TabType == GameEnum.honorTabType.Character then
|
|
if self.nSelectedType == HonorTitleType.Affinity then
|
|
table.insert(self.tbRefreshDataList, v)
|
|
end
|
|
elseif data.TabType == GameEnum.honorTabType.Activity and self.nSelectedType == HonorTitleType.Activity then
|
|
table.insert(self.tbRefreshDataList, v)
|
|
end
|
|
end
|
|
nCount = #self.tbRefreshDataList
|
|
end
|
|
table.sort(self.tbRefreshDataList, function(a, b)
|
|
if a.Sort ~= b.Sort then
|
|
return a.Sort > b.Sort
|
|
else
|
|
return a.Id < b.Id
|
|
end
|
|
end)
|
|
self.tbHonorTitle = {}
|
|
self.tbGridRedDot = {}
|
|
self._mapNode.HonorTitleContent:SetActive(0 < nCount)
|
|
if 0 < nCount then
|
|
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
|
self:UnbindCtrlByNode(objCtrl)
|
|
self.tbGridCtrl[nInstanceId] = nil
|
|
end
|
|
self._mapNode.svHonorTitle:Init(nCount, self, self.OnGridRefresh)
|
|
end
|
|
end
|
|
function FriendHonorTitleCtrl:RefreshReddot(honorId)
|
|
local sJson = localdata.GetPlayerLocalData("HonorTitle")
|
|
local localHonorTilte = decodeJson(sJson)
|
|
if type(localHonorTilte) ~= "table" then
|
|
return
|
|
end
|
|
local bFind = false
|
|
for k, v in pairs(localHonorTilte) do
|
|
if tonumber(v) == honorId then
|
|
RedDotManager.SetValid(RedDotDefine.Friend_Honor_Title_Item, honorId, false)
|
|
table.remove(localHonorTilte, k)
|
|
bFind = true
|
|
break
|
|
end
|
|
end
|
|
if bFind then
|
|
localdata.SetPlayerLocalData("HonorTitle", RapidJson.encode(localHonorTilte))
|
|
end
|
|
end
|
|
function FriendHonorTitleCtrl:OnGridRefresh(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
local honorData = self.tbRefreshDataList[nIndex]
|
|
local btnGrid = goGrid.transform:Find("btnGrid"):GetComponent("UIButton")
|
|
local animRoot = btnGrid.transform:Find("AnimRoot")
|
|
local imgHonorTitleChooseBg = animRoot:Find("imgHonorTitleChooseBg"):GetComponent("Image")
|
|
local goHonorTitle = animRoot:Find("goHonorTitle")
|
|
local goChosenState = animRoot:Find("goChosenState")
|
|
local goEquipState = animRoot:Find("goEquipState")
|
|
local imgHonorTitleChooseBg1 = goChosenState:Find("imgHonorTitleChooseBg1"):GetComponent("Image")
|
|
local imgHonorTitleEquipBg = goEquipState:Find("imgHonorTitleEquipBg"):GetComponent("Image")
|
|
local txtCurChoose = goChosenState:Find("imgBg/txtCurChoose"):GetComponent("TMP_Text")
|
|
local txtCurEquip = goEquipState:Find("imgBg/txtCurEquip"):GetComponent("TMP_Text")
|
|
NovaAPI.SetTMPText(txtCurChoose, ConfigTable.GetUIText("Honor_Title_State_CurChoose"))
|
|
NovaAPI.SetTMPText(txtCurEquip, ConfigTable.GetUIText("Honor_Title_State_CurEquip"))
|
|
local nInstanceId = goGrid:GetInstanceID()
|
|
if not self.tbGridCtrl[nInstanceId] then
|
|
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goHonorTitle, "Game.UI.FriendEx.HonorTitleCtrl")
|
|
end
|
|
self.tbGridRedDot[nInstanceId] = honorData.Id
|
|
local ctrl = self.tbGridCtrl[nInstanceId]
|
|
ctrl:RegisterRedDot(honorData.Id)
|
|
local level
|
|
if honorData.Type == GameEnum.honorType.Character then
|
|
local affinityData = PlayerData.Char:GetCharAffinityData(honorData.Params[1])
|
|
level = affinityData ~= nil and affinityData.Level or 1
|
|
elseif honorData.Type == GameEnum.honorType.Levels then
|
|
for k, v in pairs(self.ownHonorData) do
|
|
if v.Id == honorData.Id then
|
|
level = v.Lv or 1
|
|
break
|
|
end
|
|
end
|
|
end
|
|
local bgPath = ctrl:SetHonotTitle(honorData.Id, true, level)
|
|
self:SetPngSprite(imgHonorTitleEquipBg, bgPath ~= "" and bgPath or honorData.MainRes)
|
|
if bgPath ~= "" then
|
|
NovaAPI.SetImageNativeSize(imgHonorTitleEquipBg)
|
|
end
|
|
local spritePath = ""
|
|
if honorData.BGType == GameEnum.HonorTitleBgType.Ellipse then
|
|
if level ~= nil and level >= L2_LV and level < L3_LV then
|
|
spritePath = "db_choose_common_7"
|
|
elseif level ~= nil and level >= L3_LV then
|
|
spritePath = "db_choose_common_8"
|
|
else
|
|
spritePath = "db_choose_common_5"
|
|
end
|
|
elseif honorData.BGType == GameEnum.HonorTitleBgType.Parallelogram then
|
|
spritePath = "db_choose_common_6"
|
|
end
|
|
self:SetAtlasSprite(imgHonorTitleChooseBg, "08_db", spritePath)
|
|
self:SetAtlasSprite(imgHonorTitleChooseBg1, "08_db", spritePath)
|
|
NovaAPI.SetImageNativeSize(imgHonorTitleChooseBg)
|
|
NovaAPI.SetImageNativeSize(imgHonorTitleChooseBg1)
|
|
local bCurChosen = self.tbCurHonorTitle[self.nSelectedIndex] == honorData.Id
|
|
goChosenState.gameObject:SetActive(bCurChosen)
|
|
imgHonorTitleChooseBg.gameObject:SetActive(bCurChosen)
|
|
if self.tbCurHonorTitle[self.nSelectedIndex] == honorData.Id then
|
|
self.tbGoChosenState[self.nSelectedIndex] = {goChosenState, imgHonorTitleChooseBg}
|
|
end
|
|
local bEquiped = false
|
|
for k, v in pairs(self.tbCurHonorTitle) do
|
|
if v == honorData.Id then
|
|
bEquiped = true
|
|
break
|
|
end
|
|
end
|
|
goEquipState.gameObject:SetActive(not bCurChosen and bEquiped)
|
|
btnGrid.onClick:RemoveAllListeners()
|
|
btnGrid.onClick:AddListener(function()
|
|
if self.tbCurHonorTitle[self.nSelectedIndex] ~= honorData.Id then
|
|
for k, v in pairs(self.tbCurHonorTitle) do
|
|
if v == honorData.Id then
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Honor_Title_Equiped"))
|
|
return
|
|
end
|
|
end
|
|
if self.tbGoChosenState[self.nSelectedIndex] ~= nil then
|
|
for k, v in ipairs(self.tbGoChosenState[self.nSelectedIndex]) do
|
|
v.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
self.tbCurHonorTitle[self.nSelectedIndex] = honorData.Id
|
|
self.tbGoChosenState[self.nSelectedIndex] = {goChosenState, imgHonorTitleChooseBg}
|
|
for k, v in ipairs(self.tbGoChosenState[self.nSelectedIndex]) do
|
|
v.gameObject:SetActive(true)
|
|
end
|
|
else
|
|
self.tbCurHonorTitle[self.nSelectedIndex] = nil
|
|
for k, v in ipairs(self.tbGoChosenState[self.nSelectedIndex]) do
|
|
v.gameObject:SetActive(false)
|
|
end
|
|
self.tbGoChosenState[self.nSelectedIndex] = nil
|
|
end
|
|
self:RefreshHonorTitle()
|
|
self:RefreshReddot(honorData.Id)
|
|
end)
|
|
end
|
|
function FriendHonorTitleCtrl:PlayInAni()
|
|
self.gameObject:SetActive(true)
|
|
self.ani:Play("t_window_04_t_in")
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
|
end
|
|
function FriendHonorTitleCtrl:PlayOutAni()
|
|
self.ani:Play("t_window_04_t_out")
|
|
self:AddTimer(1, 0.2, "Close", true, true, true)
|
|
end
|
|
function FriendHonorTitleCtrl:Close()
|
|
self.gameObject:SetActive(false)
|
|
end
|
|
function FriendHonorTitleCtrl:SetTimer()
|
|
self.bCd = true
|
|
if self.timer ~= nil then
|
|
self.timer:Cancel(false)
|
|
self.timer = nil
|
|
end
|
|
self.timer = self:AddTimer(1, 5, function()
|
|
self.bCd = false
|
|
end, true, true, false)
|
|
end
|
|
function FriendHonorTitleCtrl:Awake()
|
|
self.ani = self.gameObject.transform:GetComponent("Animator")
|
|
self.tbGridCtrl = {}
|
|
self.tbGridRedDot = {}
|
|
end
|
|
function FriendHonorTitleCtrl:OnEnable()
|
|
end
|
|
function FriendHonorTitleCtrl:OnDisable()
|
|
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
|
self:UnbindCtrlByNode(objCtrl)
|
|
self.tbGridCtrl[nInstanceId] = nil
|
|
end
|
|
self.tbGridCtrl = {}
|
|
end
|
|
function FriendHonorTitleCtrl:OnDestroy()
|
|
end
|
|
function FriendHonorTitleCtrl:OnBtnClick_Cancel(btn)
|
|
EventManager.Hit("FriendClosePop")
|
|
end
|
|
function FriendHonorTitleCtrl:OnBtnClick_ChangeHonorTitle(btn, nIndex, bInit)
|
|
if self.nSelectedIndex ~= nil and self.nSelectedIndex == nIndex then
|
|
return
|
|
end
|
|
if self.nSelectedIndex ~= nil then
|
|
self._mapNode.imgSelect[self.nSelectedIndex]:SetActive(false)
|
|
end
|
|
self._mapNode.imgSelect[nIndex]:SetActive(true)
|
|
self.nSelectedIndex = nIndex
|
|
if not bInit then
|
|
self:RefreshHonorTitleList()
|
|
end
|
|
end
|
|
function FriendHonorTitleCtrl:OnBtnClick_ChangeHonorTitleType(btn, nIndex)
|
|
if self.nSelectedType ~= nil and self.nSelectedType == nIndex then
|
|
return
|
|
end
|
|
if self.nSelectedType ~= nil then
|
|
self._mapNode.imgTab[self.nSelectedType]:SetActive(false)
|
|
self._mapNode.txtTab[self.nSelectedType]:SetActive(false)
|
|
self._mapNode.txtTabUnSelect[self.nSelectedType]:SetActive(true)
|
|
end
|
|
self._mapNode.imgTab[nIndex]:SetActive(true)
|
|
self._mapNode.txtTab[nIndex]:SetActive(true)
|
|
self._mapNode.txtTabUnSelect[nIndex]:SetActive(false)
|
|
self.nSelectedType = nIndex
|
|
self:RefreshHonorTitleList()
|
|
end
|
|
function FriendHonorTitleCtrl:OnBtnClick_Confirm()
|
|
local callback = function()
|
|
local mapMsg = {
|
|
nType = AllEnum.MessageBox.Tips,
|
|
bPositive = true,
|
|
sContent = ConfigTable.GetUIText("Change_Success")
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, mapMsg)
|
|
self:OnBtnClick_Cancel()
|
|
end
|
|
if self.tbCurHonorTitle == nil then
|
|
self.tbhonorTitle = {}
|
|
end
|
|
for i = 1, 3 do
|
|
if self.tbCurHonorTitle[i] == nil then
|
|
self.tbCurHonorTitle[i] = 0
|
|
end
|
|
end
|
|
PlayerData.Base:SendPlayerHonorTitleEditReq(self.tbCurHonorTitle, callback)
|
|
end
|
|
return FriendHonorTitleCtrl
|