107 lines
No EOL
3.5 KiB
Lua
107 lines
No EOL
3.5 KiB
Lua
local tableInsert = table.insert
|
|
local pairs = pairs
|
|
local tableSort = table.sort
|
|
|
|
---@class XDormTerminalTeam
|
|
local XDormTerminalTeam = XClass(nil, "XDormTerminalTeam")
|
|
|
|
function XDormTerminalTeam:Ctor()
|
|
self.TeamQuest = {}
|
|
self.TeamLimitCount = 0
|
|
self.DispatchCharacter = {} --已派遣成员
|
|
end
|
|
|
|
-- 设置终端队伍最大数量值
|
|
function XDormTerminalTeam:InitTeamLimit(teamCount)
|
|
self.TeamLimitCount = teamCount
|
|
end
|
|
|
|
-- 已接取委托 (会有相同的委托被接取,保存下标信息)
|
|
function XDormTerminalTeam:UpdateTeamData(questAccepts)
|
|
for _, quest in pairs(questAccepts) do
|
|
if not quest:IsAward() and self:CheckHaveNewPos() then
|
|
tableInsert(self.TeamQuest, quest)
|
|
local teamCharacters = quest:GetTeamCharacter()
|
|
for _, characterId in pairs(teamCharacters or {}) do
|
|
self.DispatchCharacter[characterId] = characterId
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 检查有没有空格子
|
|
function XDormTerminalTeam:CheckHaveNewPos()
|
|
local curLevelTeamCount = self:GetCurLevelTeamCount()
|
|
return curLevelTeamCount - #self.TeamQuest > 0
|
|
end
|
|
|
|
-- 获取空闲栏位数量
|
|
function XDormTerminalTeam:GetFreeTeamPosCount()
|
|
local curLevelTeamCount = self:GetCurLevelTeamCount()
|
|
local count = curLevelTeamCount - #self.TeamQuest
|
|
if count < 0 then
|
|
count = 0
|
|
end
|
|
return count
|
|
end
|
|
|
|
-- 检查是否是派遣中成员
|
|
function XDormTerminalTeam:CheckDispatchCharacter(characterId)
|
|
return self.DispatchCharacter[characterId] and true or false
|
|
end
|
|
|
|
function XDormTerminalTeam:ClearTeamData()
|
|
self.TeamQuest = {}
|
|
self.DispatchCharacter = {}
|
|
end
|
|
|
|
-- 获取终端队伍列表
|
|
function XDormTerminalTeam:GetTerminalTeamList()
|
|
local teamList = {}
|
|
-- 已领取的委托
|
|
for _, data in pairs(self.TeamQuest) do
|
|
tableInsert(teamList, { QuestAccept = data })
|
|
end
|
|
-- 队伍排序 可领取 > 派遣中 同状态下按照委托等级顺序进行排序
|
|
tableSort(teamList, function(a, b)
|
|
local stateA = XDataCenter.DormQuestManager.GetQuestAcceptTeamState(a.QuestAccept)
|
|
local stateB = XDataCenter.DormQuestManager.GetQuestAcceptTeamState(b.QuestAccept)
|
|
local qualityA = self:GetDormQuestQuality(a.QuestAccept)
|
|
local qualityB = self:GetDormQuestQuality(b.QuestAccept)
|
|
if stateA ~= stateB then
|
|
return stateA < stateB
|
|
end
|
|
if qualityA ~= qualityB then
|
|
return qualityA > qualityB
|
|
end
|
|
return a.QuestAccept:GetQuestId() < b.QuestAccept:GetQuestId()
|
|
end)
|
|
-- 空闲数据
|
|
local curLevelTeamCount = self:GetCurLevelTeamCount()
|
|
for _ = #self.TeamQuest + 1, curLevelTeamCount do
|
|
tableInsert(teamList, { State = XDormQuestConfigs.TerminalTeamState.Empty })
|
|
end
|
|
-- Lock数据
|
|
for _ = curLevelTeamCount + 1, self.TeamLimitCount do
|
|
tableInsert(teamList, { State = XDormQuestConfigs.TerminalTeamState.Lock })
|
|
end
|
|
|
|
return teamList
|
|
end
|
|
|
|
-- 获取当前终端等级队伍栏位数
|
|
function XDormTerminalTeam:GetCurLevelTeamCount()
|
|
---@type XDormQuestTerminal
|
|
local terminalViewModel = XDataCenter.DormQuestManager.GetCurLevelTerminalViewModel()
|
|
return terminalViewModel:GetQuestTerminalTeamCount()
|
|
end
|
|
|
|
-- 获取委托等级
|
|
---@param questAccept XDormQuestAcceptInfo
|
|
function XDormTerminalTeam:GetDormQuestQuality(questAccept)
|
|
---@type XDormQuest
|
|
local dormQuestViewModel = XDataCenter.DormQuestManager.GetDormQuestViewModel(questAccept:GetQuestId())
|
|
return dormQuestViewModel:GetQuestQuality()
|
|
end
|
|
|
|
return XDormTerminalTeam |