local GameManager = {}
local Players = game.Players
local Configurations = require(game.ServerStorage.Configurations)
local TeamManager = require(script.TeamManager)
local PlayerManager = require(script.PlayerManager)
local MapManager = require(script.MapManager)
local TimeManager = require(script.TimeManager)
local DisplayManager = require(script.DisplayManager)
local IntermissionRunning = false
local EnoughPlayers = false
local GameRunning = false
local Events = game.ReplicatedStorage.Events
local CaptureFlag = Events.CaptureFlag
local ReturnFlag = Events.ReturnFlag
function OnCaptureFlag(player)
PlayerManager:AddPlayerScore(player, 1)
TeamManager:AddTeamScore(player.TeamColor, 1)
DisplayManager:DisplayNotification(player.TeamColor, 'Captured Flag!')
end
local function OnReturnFlag(flagColor)
DisplayManager:DisplayNotification(flagColor, 'Flag Returned!')
end
function GameManager:Initialize()
MapManager:SaveMap()
end
function GameManager:RunIntermission()
IntermissionRunning = true
TimeManager:StartTimer(Configurations.INTERMISSION_DURATION)
DisplayManager:StartIntermission()
EnoughPlayers = Players.NumPlayers >= Configurations.MIN_PLAYERS
DisplayManager:UpdateTimerInfo(true, not EnoughPlayers)
spawn(function()
repeat
if EnoughPlayers and Players.NumPlayers < Configurations.MIN_PLAYERS then
EnoughPlayers = false
elseif not EnoughPlayers and Players.NumPlayers >= Configurations.MIN_PLAYERS then
EnoughPlayers = true
end
DisplayManager:UpdateTimerInfo(true, not EnoughPlayers)
wait(.5)
until IntermissionRunning == false
end)
wait(Configurations.INTERMISSION_DURATION)
IntermissionRunning = false
end
function GameManager:StopIntermission()
DisplayManager:UpdateTimerInfo(false, false)
DisplayManager:StopIntermission()
end
function GameManager:GameReady()
return Players.NumPlayers >= Configurations.MIN_PLAYERS
end
function GameManager:StartRound()
TeamManager:ClearTeamScores()
PlayerManager:ClearPlayerScores()
PlayerManager:AllowPlayerSpawn(true)
PlayerManager:LoadPlayers()
GameRunning = true
PlayerManager:SetGameRunning(true)
TimeManager:StartTimer(Configurations.ROUND_DURATION)
end
function GameManager:Update()
end
function GameManager:RoundOver()
local winningTeam = TeamManager:HasTeamWon()
if winningTeam then
DisplayManager:DisplayVictory(winningTeam)
return true
end
if TimeManager:TimerDone() then
if TeamManager:AreTeamsTied() then
DisplayManager:DisplayVictory('Tie')
else
winningTeam = TeamManager:GetWinningTeam()
DisplayManager:DisplayVictory(winningTeam)
end
return true
end
return false
end
function GameManager:RoundCleanup()
PlayerManager:SetGameRunning(false)
wait(Configurations.END_GAME_WAIT)
PlayerManager:AllowPlayerSpawn(false)
PlayerManager:DestroyPlayers()
DisplayManager:DisplayVictory(nil)
TeamManager:ClearTeamScores()
PlayerManager:ClearPlayerScores()
TeamManager:ShuffleTeams()
MapManager:ClearMap()
MapManager:LoadMap()
end
CaptureFlag.Event:connect(OnCaptureFlag)
ReturnFlag.Event:connect(OnReturnFlag)
return GameManager