168 lines
No EOL
4.2 KiB
Lua
168 lines
No EOL
4.2 KiB
Lua
---@class XPlanetTeam
|
|
local XPlanetTeam = XClass(nil, "XPlanetTeam")
|
|
|
|
function XPlanetTeam:Ctor()
|
|
---@type XPlanetCharacter
|
|
self._Members = {}
|
|
self._Captain = false
|
|
self._Capacity = 3
|
|
end
|
|
|
|
function XPlanetTeam:UpdateCaptain()
|
|
if not self._Captain or not self:IsInTeam(self._Captain) then
|
|
self._Captain = self._Members[1]
|
|
end
|
|
self:Sort()
|
|
end
|
|
|
|
function XPlanetTeam:SetData(characterList)
|
|
if not characterList then
|
|
return
|
|
end
|
|
self._Members = {}
|
|
for _, data in pairs(characterList) do
|
|
local characterId = data.Id
|
|
self._Members[#self._Members + 1] = characterId
|
|
end
|
|
self:UpdateCaptain()
|
|
XEventManager.DispatchEvent(XEventId.EVENT_PLAYER_LEVEL_UP_ANIMATION_END)
|
|
end
|
|
|
|
function XPlanetTeam:SetInitData(characterList)
|
|
if not characterList then
|
|
return
|
|
end
|
|
self._Members = {}
|
|
for _, characterId in pairs(characterList) do
|
|
self._Members[#self._Members + 1] = characterId
|
|
end
|
|
self:UpdateCaptain()
|
|
XEventManager.DispatchEvent(XEventId.EVENT_PLAYER_LEVEL_UP_ANIMATION_END)
|
|
end
|
|
|
|
function XPlanetTeam:GetMembers()
|
|
local result = {}
|
|
for i = 1, #self._Members do
|
|
local characterId = self._Members[i]
|
|
local character = XDataCenter.PlanetExploreManager.GetCharacter(characterId)
|
|
result[#result + 1] = character
|
|
end
|
|
return result
|
|
end
|
|
|
|
---@param character XPlanetCharacter
|
|
function XPlanetTeam:IsInTeam(character)
|
|
if not character then
|
|
return false
|
|
end
|
|
local characterId
|
|
if type(character) == "number" then
|
|
characterId = character
|
|
else
|
|
characterId = character:GetCharacterId()
|
|
end
|
|
for i = 1, #self._Members do
|
|
local id = self._Members[i]
|
|
if id == characterId then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
---@param character XPlanetCharacter
|
|
function XPlanetTeam:IsLeader(character)
|
|
if not character then
|
|
return false
|
|
end
|
|
local id = self._Members[1]
|
|
if not id then
|
|
return false
|
|
end
|
|
if id == character:GetCharacterId() then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
---@param character XPlanetCharacter
|
|
function XPlanetTeam:JoinMember(character)
|
|
if not character then
|
|
return
|
|
end
|
|
if not character:IsUnlock() then
|
|
XUiManager.TipErrorWithKey("PlanetRunningCharacterIsLock")
|
|
return
|
|
end
|
|
if self:IsInTeam(character) then
|
|
XUiManager.TipErrorWithKey("PlanetRunningIsInTeam")
|
|
return
|
|
end
|
|
if #self._Members >= self._Capacity then
|
|
XUiManager.TipErrorWithKey("PlanetRunningTeamIsFull")
|
|
return
|
|
end
|
|
if not self:IsInTeam(character) then
|
|
self._Members[#self._Members + 1] = character:GetCharacterId()
|
|
self:UpdateCaptain()
|
|
end
|
|
|
|
XDataCenter.PlanetExploreManager.RequestUpdateTeam()
|
|
end
|
|
|
|
---@param character XPlanetCharacter
|
|
function XPlanetTeam:KickOut(character)
|
|
for i = 1, #self._Members do
|
|
local id = self._Members[i]
|
|
if id == character:GetCharacterId() then
|
|
table.remove(self._Members, i)
|
|
end
|
|
end
|
|
self:UpdateCaptain()
|
|
XDataCenter.PlanetExploreManager.RequestUpdateTeam()
|
|
end
|
|
|
|
function XPlanetTeam:GetCapacity()
|
|
return self._Capacity
|
|
end
|
|
|
|
function XPlanetTeam:GetData4Request()
|
|
return self._Members
|
|
end
|
|
|
|
---@param character XPlanetCharacter
|
|
function XPlanetTeam:SetCaptain(character)
|
|
if not character then
|
|
self._Captain = false
|
|
return
|
|
end
|
|
self._Captain = character:GetCharacterId()
|
|
self:Sort()
|
|
XDataCenter.PlanetExploreManager.RequestUpdateTeam()
|
|
XEventManager.DispatchEvent(XEventId.EVENT_PLANET_UPDATE_TEAM)
|
|
end
|
|
|
|
function XPlanetTeam:Sort()
|
|
table.sort(self._Members, function(a, b)
|
|
if a == self._Captain then
|
|
return true
|
|
end
|
|
if b == self._Captain then
|
|
return false
|
|
end
|
|
local priorityA = XPlanetCharacterConfigs.GetCharacterPriority(a)
|
|
local priorityB = XPlanetCharacterConfigs.GetCharacterPriority(b)
|
|
return priorityA < priorityB
|
|
end)
|
|
end
|
|
|
|
function XPlanetTeam:GetAmount()
|
|
return #self._Members
|
|
end
|
|
|
|
---@param character XPlanetCharacter
|
|
function XPlanetTeam:IsCaptain(character)
|
|
return self._Captain == character:GetCharacterId()
|
|
end
|
|
|
|
return XPlanetTeam |