---@class UGCPlayerStartManager_C:BP_PlayerStartManager_C ---@field PlayerStartClass UClass --Edit Below-- ---@type UGCPlayerStartManager_C local UGCPlayerStartManager = { AllPlayerStart = {}; WaitingPlayerStarts = {}; PlayerStartIndexW = 0; Team1PlayerStarts = {}; Team2PlayerStarts = {}; PlayerStartIndexT1 = 0; PlayerStartIndexT2 = 0; TempGameState = -1; bSwapBornPoint = false; }; function UGCPlayerStartManager:ReceiveBeginPlay() self.SuperClass.ReceiveBeginPlay(self) self.TempGameState = UGCGameSystem.GameState:GetGameStateType() self:InitPlayerStartList() UGCEventSystem.AddListener(EventEnum.SwapBornPoint, self.SwapBornPoint, self) end function UGCPlayerStartManager:InitPlayerStartList() self.AllPlayerStart = GameplayStatics.GetAllActorsOfClass(self, self.PlayerStartClass, {}) for k, TempPlayerStart in pairs(self.AllPlayerStart) do if TempPlayerStart.PlayerBornPointID == 1 then self.Team1PlayerStarts[#self.Team1PlayerStarts + 1] = TempPlayerStart elseif TempPlayerStart.PlayerBornPointID == 2 then self.Team2PlayerStarts[#self.Team2PlayerStarts + 1] = TempPlayerStart else self.WaitingPlayerStarts[#self.WaitingPlayerStarts + 1] = TempPlayerStart end end table.Shuffle(self.WaitingPlayerStarts) table.Shuffle(self.Team1PlayerStarts) table.Shuffle(self.Team2PlayerStarts) UGCLogSystem.Log("[UGCPlayerStartManager_ReceiveBeginPlay]Team1PlayerStarts:%d Team2PlayerStarts:%d", #self.Team1PlayerStarts, #self.Team2PlayerStarts) end function UGCPlayerStartManager:GetUGCModePlayerStart(Controller) if self.TempGameState ~= UGCGameSystem.GameState:GetGameStateType() then self.TempGameState = UGCGameSystem.GameState:GetGameStateType() self:InitPlayerStartList() end if UGCGameSystem.GameState:GetGameStateType() == CustomEnum.EGameState.Waiting then local ResPlayerStart = self.WaitingPlayerStarts[self.PlayerStartIndexW + 1] self.PlayerStartIndexW = (self.PlayerStartIndexW + 1) % #self.WaitingPlayerStarts return ResPlayerStart else if UGCPlayerStateSystem.GetTeamID(Controller.PlayerKey) == (self.bSwapBornPoint and 2 or 1) then local ResPlayerStart = self.Team1PlayerStarts[self.PlayerStartIndexT1 + 1] self.PlayerStartIndexT1 = (self.PlayerStartIndexT1 + 1) % #self.Team1PlayerStarts return ResPlayerStart else local ResPlayerStart = self.Team2PlayerStarts[self.PlayerStartIndexT2 + 1] self.PlayerStartIndexT2 = (self.PlayerStartIndexT2 + 1) % #self.Team2PlayerStarts return ResPlayerStart end end end function UGCPlayerStartManager:SwapBornPoint() self.bSwapBornPoint = not self.bSwapBornPoint end return UGCPlayerStartManager;