function GameManager.Initialize(B)MapManager:SaveMap()end function GameManager.RunIntermission(B)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(B)DisplayManager:UpdateTimerInfo(false,false)DisplayManager:StopIntermission()end function GameManager.GameReady(B)return Players.NumPlayers>=Configurations.MIN_PLAYERS end function GameManager.StartRound(B)TeamManager:ClearTeamScores()PlayerManager:ClearPlayerScores()PlayerManager:AllowPlayerSpawn(true)PlayerManager:LoadPlayers()GameRunning=true PlayerManager:SetGameRunning(true)TimeManager:StartTimer(Configurations.ROUND_DURATION)end function GameManager.Update(B) end function GameManager.RoundOver(B)local n=TeamManager:HasTeamWon()if n then DisplayManager:DisplayVictory(n)return true end if TimeManager:TimerDone()then if TeamManager:AreTeamsTied()then DisplayManager:DisplayVictory("\084\105\101")else n=TeamManager:GetWinningTeam()DisplayManager:DisplayVictory(n)end return true end return false end function GameManager.RoundCleanup(B)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

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()
	--IntermissionRunning = false
	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()
	--TODO: Add custom custom game code here
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
