ro-webgl/Assets/Lua/UI/UIPet/UIPetMatsCtr.lua
2021-12-21 09:40:39 +08:00

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