302 lines
8.2 KiB
Lua
302 lines
8.2 KiB
Lua
local UIPetMatsCtr = class("UIPetMatsCtr", require("UICtrBase"))
|
|
|
|
local commonSkillMatId = 819
|
|
function UIPetMatsCtr:Init(view)
|
|
self.view = view
|
|
end
|
|
|
|
function UIPetMatsCtr:SetData(data)
|
|
self.asyncIdx = 0
|
|
if data == nil then return end
|
|
self.data = data
|
|
|
|
commonSkillMatId = GlobalConfig.Instance:GetConfigIntValue(313)
|
|
end
|
|
|
|
function UIPetMatsCtr:GetAsyncIdx()
|
|
self.asyncIdx = self.asyncIdx + 1
|
|
return self.asyncIdx
|
|
end
|
|
|
|
function UIPetMatsCtr:GetData()
|
|
return self.data
|
|
end
|
|
|
|
function UIPetMatsCtr:SetChildController(ctr)
|
|
self.childCtr = ctr
|
|
end
|
|
|
|
function UIPetMatsCtr:GetFromUIId()
|
|
return self.data.fromUIId
|
|
end
|
|
|
|
function UIPetMatsCtr:GetRelationCfgId()
|
|
return self.data.relationCfgId
|
|
end
|
|
|
|
function UIPetMatsCtr:GetSupportIdx()
|
|
return self.data.supportIdx
|
|
end
|
|
|
|
function UIPetMatsCtr:GetEnterType()
|
|
return self.data.enterType or Enum.ItemIEnterType.PetMats
|
|
end
|
|
|
|
function UIPetMatsCtr:SetSelectedData(idx)
|
|
if self.data.selectedIdx == idx then
|
|
self.data.selectedIdx = nil
|
|
else
|
|
self.data.selectedIdx = idx
|
|
end
|
|
end
|
|
|
|
function UIPetMatsCtr:RefreshPetDatas()
|
|
local fromUIId = self:GetFromUIId()
|
|
if fromUIId == Enum.UIPageName.UIPetLvUp then
|
|
return self:RefreshSkillMatsData()
|
|
elseif fromUIId == Enum.UIPageName.UIPetRelations then
|
|
return self:RefreshRelationsData()
|
|
elseif fromUIId == Enum.UIPageName.UIPetMySupport then
|
|
return self:RefreshSupportData()
|
|
end
|
|
end
|
|
|
|
function UIPetMatsCtr:RefreshSkillMatsData()
|
|
local selfId = self.data.selfId
|
|
local selectedId = self.data.selectedId
|
|
local petDatasSource = ManagerContainer.DataMgr.PetDataMgr:GetPetDatas()
|
|
local petDatas = petDatasSource
|
|
local selfDatas
|
|
if selfId then
|
|
local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(selfId)
|
|
selfDatas = CommonUtil.ArrayFilterSelections(petDatas, Enum.FilterType.AND, {"cfgId", "qiyueHeroId"}, {petData.cfgId, 0})
|
|
local commonDatas = CommonUtil.ArrayFilterSelections(petDatas, Enum.FilterType.AND, {"cfgId", "qiyueHeroId"}, {commonSkillMatId, 0})
|
|
|
|
for j = #selfDatas, 1, -1 do
|
|
if selfDatas[j].id == selfId then
|
|
table.remove(selfDatas, j)
|
|
break
|
|
end
|
|
end
|
|
|
|
if selfDatas ~= nil or commonDatas ~= nil then
|
|
CommonUtil.ArraySortSelections(selfDatas, Enum.TableSortRule.Up, "isBattle", "quality", "isSupport", "isRelevant", "advanceLevel", "level", "cfgId")
|
|
CommonUtil.ArraySortSelections(commonDatas, Enum.TableSortRule.Up, "isBattle", "quality", "isSupport", "isRelevant", "advanceLevel", "level", "cfgId")
|
|
|
|
if petData.cfgId ~= commonSkillMatId then
|
|
for i = 1, #commonDatas do
|
|
selfDatas[#selfDatas + 1] = commonDatas[i]
|
|
end
|
|
end
|
|
|
|
for k,v in pairs(selfDatas) do
|
|
v.idx = k
|
|
end
|
|
if selectedId then
|
|
for j = #selfDatas, 1, -1 do
|
|
if selfDatas[j].id == selectedId then
|
|
selfDatas[j].selected = 1
|
|
self.data.curSelectedData = selfDatas[j]
|
|
self.data.selectedIdx = selfDatas[j].idx
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if selfDatas == nil then
|
|
ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NoCardTips3")
|
|
end
|
|
-- LogHRWarning(Inspect(selfDatas))
|
|
end
|
|
return selfDatas
|
|
end
|
|
|
|
function UIPetMatsCtr:RefreshRelationsData()
|
|
local relationCfgId = self.data.relationCfgId
|
|
local relationIdx = self.data.curRelationIdx
|
|
local relationCfgData = ManagerContainer.CfgMgr:GetPetPartnerDataById(relationCfgId)
|
|
local petDatas
|
|
|
|
if not relationCfgData then
|
|
return petDatas
|
|
end
|
|
|
|
local function ParseToPetData(uid, nickname, petData)
|
|
local data = {}
|
|
data.uid = uid
|
|
data.nickname = nickname
|
|
data.id = petData.id
|
|
data.cfgId = petData.cfgId
|
|
data.quality = petData.quality
|
|
data.level = petData.level
|
|
data.advanceLevel = petData.advanceLevel
|
|
data.natureType = petData.natureType
|
|
data.isBattle = petData.isBattle
|
|
data.isSupport = petData.isSupport
|
|
data.isRelevant = petData.isRelevant
|
|
return data
|
|
end
|
|
|
|
local selectedPetId, selectedUid
|
|
local relationData = ManagerContainer.DataMgr.PetDataMgr:GetPetRelationDataByCfgId(relationCfgId)
|
|
if relationData and relationData.relationPets then
|
|
for k,v in pairs(relationData.relationPets) do
|
|
if k == relationIdx then
|
|
selectedPetId, selectedUid = v.petId, v.uid
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
local function IsUsed(uid, id)
|
|
if relationData and relationData.relationPets then
|
|
for k,v in pairs(relationData.relationPets) do
|
|
if v.uid == uid and v.petId == id then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
local cfgIds, advenceNum = {},{}
|
|
local condition = relationCfgData['Condition1']
|
|
if condition and condition[relationIdx] then
|
|
local cfgId = condition[relationIdx][1]
|
|
local num = condition[relationIdx][2]
|
|
cfgIds[#cfgIds + 1] = cfgId
|
|
advenceNum[#advenceNum + 1] = num
|
|
end
|
|
|
|
local val = GlobalConfig.Instance:GetConfigStrValue(208)
|
|
local advanceLimit = 5
|
|
if val ~= "" and val ~= nil then
|
|
local advenceLvStage = CommonUtil.DeserializeGlobalStrToTable(val)
|
|
advanceLimit = #advenceLvStage
|
|
end
|
|
|
|
if #advenceNum > 0 then
|
|
for i = 1, advanceLimit do
|
|
if i > advenceNum[1] and not CommonUtil.EleInTable(i, advenceNum) then
|
|
advenceNum[#advenceNum + 1] = i
|
|
end
|
|
end
|
|
end
|
|
|
|
local petDatasSource = ManagerContainer.DataMgr.PetDataMgr:GetPetDatas()
|
|
petDatas = petDatasSource
|
|
local friendDatas = ManagerContainer.DataMgr.PetDataMgr:GetCurFriendSupportDatas()
|
|
|
|
local list = {}
|
|
local uid = 0
|
|
local nickname = ManagerContainer.DataMgr.UserData:GetUserNickname()
|
|
for _,v in pairs(petDatas) do
|
|
if selectedUid ~= uid or v.id ~= selectedPetId then
|
|
local data = ParseToPetData(uid, nickname, v)
|
|
data.canUse = not IsUsed(uid, v.id)
|
|
list[#list + 1] = data
|
|
end
|
|
end
|
|
for _,v in pairs(friendDatas) do
|
|
local uid = v.uid
|
|
local nickname = v.nickname
|
|
for _,v1 in pairs(v.supportPets) do
|
|
if selectedUid ~= uid or selectedPetId ~= v1.id then
|
|
local data = ParseToPetData(uid, nickname, v1)
|
|
data.canUse = not IsUsed(uid, v1.id)
|
|
list[#list + 1] = data
|
|
end
|
|
end
|
|
end
|
|
if list ~= nil then
|
|
list = CommonUtil.ArrayFilterSelections(list, Enum.FilterType.AND, {"cfgId", "advanceLevel"}, {cfgIds, advenceNum})
|
|
CommonUtil.ArraySortListSelections(list, {Enum.TableSortRule.Down,Enum.TableSortRule.Up,Enum.TableSortRule.Up, Enum.TableSortRule.Up, Enum.TableSortRule.Down},
|
|
{"canUse", "isBattle", "isRelevant", "isSupport", "advanceLevel"})
|
|
|
|
for k,v in pairs(list) do
|
|
v.idx = k
|
|
end
|
|
end
|
|
|
|
if list == nil then
|
|
ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NoCardTips3")
|
|
end
|
|
return list
|
|
end
|
|
|
|
function UIPetMatsCtr:RefreshSupportData()
|
|
local mySupportPets = ManagerContainer.DataMgr.PetDataMgr:GetMySupportPets()
|
|
local function IsUsed(id)
|
|
if mySupportPets then
|
|
for _,v in pairs(mySupportPets) do
|
|
if v.id == id then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
local petDatasSource = ManagerContainer.DataMgr.PetDataMgr:GetPetDatas()
|
|
local petDatas = petDatasSource
|
|
if petDatas == nil then
|
|
ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NoCardTips3")
|
|
end
|
|
if petDatas then
|
|
for k,v in pairs(petDatas) do
|
|
v.isUsed = IsUsed(v.id)
|
|
end
|
|
|
|
CommonUtil.ArraySortSelections(petDatas, Enum.TableSortRule.Down, "isUsed", "quality", "advanceLevel", "level", "cfgId")
|
|
|
|
for k,v in pairs(petDatas) do
|
|
v.idx = k
|
|
end
|
|
|
|
-- LogHRWarning(Inspect(petDatas))
|
|
end
|
|
return petDatas
|
|
end
|
|
|
|
function UIPetMatsCtr:GetCurSelectedIdx()
|
|
return self.data.curSelectedData, self.data.selectedIdx
|
|
end
|
|
|
|
function UIPetMatsCtr:GetCurSelectedIdByIdx()
|
|
if self.childCtr and self.data.selectedIdx then
|
|
local data = self.childCtr:GetShowData(self.data.selectedIdx - 1)
|
|
return data.id
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function UIPetMatsCtr:GetCurSelectedDataByIdx()
|
|
if self.childCtr and self.data.selectedIdx then
|
|
local data = self.childCtr:GetShowData(self.data.selectedIdx - 1)
|
|
return data
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function UIPetMatsCtr:WasSkillUp(petData)
|
|
if not petData.skillList then return false end
|
|
|
|
for _,v in pairs(petData.skillList) do
|
|
if v.level > 1 then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function UIPetMatsCtr:OnDispose()
|
|
self.childCtr = nil
|
|
|
|
self.data = nil
|
|
self.view = nil
|
|
end
|
|
|
|
return UIPetMatsCtr
|
|
|