--rbxsig%hm7SbDaf0GHizpUYxb6qQAHuUU7LfsWX8bgPnc64hv1MnSJFX+Komih+acv/5vqLxpzxHNtvBCnuAwN6l63fYukZ0Yat7mDBHBx0w0CPTaWSCs2P5WDx/W7P+L8AkqpaowXKgCKST9VBErgwqTlUySsi0r9+HfExO+cl3h2lXig=%
--rbxassetid%158948138%
-- Creates the generic "ROBLOX" loading screen on startup
-- Written by ArceusInator & Ben Tkacheff, 2014
--

-- Constants
local PLACEID = Game.PlaceId

local MPS = Game:GetService 'MarketplaceService'
local CP = Game:GetService 'ContentProvider'

local COLORS = {
	BLACK = Color3.new(0, 0, 0),
	DARK = Color3.new(35/255, 35/255, 38/255),
	DARKMED = Color3.new(61/255, 61/255, 67/255),
	DARKMED2 = Color3.new(75/255, 76/255, 85/255),
	MED = Color3.new(118/255, 118/255, 129/255),
	LIGHTMED = Color3.new(190/255, 192/255, 212/255),
	LIGHT = Color3.new(217/255, 218/255, 231/255),
	ERROR = Color3.new(253/255,68/255,72/255)
}

local IMAGES = {
	BACKGROUND_THUMBNAIL_VIGNETTE = 'rbxasset://textures/loading/loadingvignette.png',
	ROBLOX_LOGO_256 = 'rbxasset://textures/loading/robloxlogo.png',
	GAME_THUMBNAIL =  'http://www.roblox.com/Thumbs/Asset.ashx?format=png&width=420&height=230&assetId=',
	GAME_BACKGROUND = 'rbxasset://textures/loading/loadingTexture.png'
}

local VALID_TEXT_SIZES = {
	12,
	14,
	18,
	24,
	36,
	48
}

--
-- Variables
local GameAssetInfo -- loaded by InfoProvider:LoadAssets()
local currScreenGui = nil
local renderSteppedConnection = nil

--
-- Utility functions
local create = function(className, defaultParent)
	return function(propertyList)
		local object = Instance.new(className)
		
		for index, value in next, propertyList do
			if type(index) == 'string' then
				object[index] = value
			else
				if type(value) == 'function' then
					value(object)
				elseif type(value) == 'userdata' then
					value.Parent = object
				end
			end
		end
		
		if object.Parent == nil then
			object.Parent = defaultParent
		end
		
		return object
	end
end

--
-- Create objects
local MainGui = {}
local InfoProvider = {}


function InfoProvider:GetGameName()
	if GameAssetInfo ~= nil then
		return GameAssetInfo.Name
	else
		return ''
	end
end

function InfoProvider:GetCreatorName()
	if GameAssetInfo ~= nil then
		return GameAssetInfo.Creator.Name
	else
		return ''
	end
end

function InfoProvider:LoadAssets()
	Spawn(function() 
		if PLACEID <= 0 then
			while Game.PlaceId <= 0 do
				wait()
			end
			PLACEID = Game.PlaceId
		end

		IMAGES.GAME_THUMBNAIL = IMAGES.GAME_THUMBNAIL .. tostring(PLACEID)
		
		-- load game asset info
		coroutine.resume(coroutine.create(function() GameAssetInfo = MPS:GetProductInfo(PLACEID) end))

		while not currScreenGui do
			wait()
		end
		currScreenGui.ThumbnailContainer.Thumbnail.Image = IMAGES.GAME_THUMBNAIL

		-- load images
		for imageName, imageContent in next, IMAGES do
			CP:Preload(imageContent)
		end
		
	end)
end

--
-- Declare member functions
function MainGui:GenerateMain()
	local screenGui = create 'ScreenGui' {
		Name = 'RobloxLoadingGui'
	}
	
	--
	-- create descendant frames
	
	local mainBackgroundContainer = create 'Frame' {
		Name = 'MainBackgroundContainer',
		BackgroundColor3 = COLORS.DARK,
		Size = UDim2.new(1, 0, 1, 0),
		Active = true,
		
		create 'Frame' {
			Name = 'TopBar',
			BackgroundColor3 = COLORS.DARKMED,
			BorderColor3 = COLORS.MED,
			BorderSizePixel = 3,
			Position = UDim2.new(0, -220, 0, -205),
			Rotation = -10,
			Size = UDim2.new(0, 1000, 0, 220),
			ZIndex = 5,
		
			create 'ImageLabel' {
				Name = 'RobloxLogo',
				BackgroundTransparency = 1,
				Image = IMAGES.ROBLOX_LOGO_256,
				Position = UDim2.new(0, 214, 1, -80),
				Rotation = 2,
				Size = UDim2.new(0, 128, 0, 128),
				ZIndex = 6,
				
				create 'TextLabel' {
					Name = 'PoweredBy',
					BackgroundTransparency = 1,
					Position = UDim2.new(0.5, -60, 0, 30),
					Size = UDim2.new(0, 80, 0, 18),
					Font = Enum.Font.SourceSans,
					FontSize = Enum.FontSize.Size18,
					TextColor3 = Color3.new(1,1,1),
					Text = "Powered By",
					ZIndex = 6
				}
			}
		},

		create 'ImageButton' {
			Name = 'CloseButton',
			Image = 'rbxasset://textures/ui/CloseButton.png',
			BackgroundTransparency = 1,
			Position = UDim2.new(1, -27, 0, 5),
			Size = UDim2.new(0, 22, 0, 22),
			Active = true,
			ZIndex = 10
		},

		create 'Frame' {
			Name = 'ErrorFrame',
			BackgroundColor3 = COLORS.ERROR,
			BorderSizePixel = 0,
			Position = UDim2.new(0.25,0,0,0),
			Size = UDim2.new(0.5, 0, 0, 80),
			ZIndex = 5,
			Visible = false,

			create 'TextLabel' {
				Name = "ErrorText",
				BackgroundTransparency = 1,
				ZIndex = 6,
				Position = UDim2.new(0,5,0,5),
				Size = UDim2.new(1,-10,1,-10),
				Font = Enum.Font.SourceSans,
				FontSize = Enum.FontSize.Size18,
				Text = "",
				TextColor3 = Color3.new(1,1,1),
				TextXAlignment = Enum.TextXAlignment.Center,
				TextYAlignment = Enum.TextYAlignment.Center,
				TextWrap = true
			}
		},
		
		create 'Frame' {
			Name = 'BottomBar',
			BorderSizePixel = 0,
			BackgroundTransparency = 1,
			Position = UDim2.new(0, 0, 1, -150),
			Size = UDim2.new(1, 0, 0, 300),
			ZIndex = 5,
			
			create 'Frame' {
				Name = 'BottomBarActual',
				BackgroundColor3 = COLORS.DARKMED,
				BorderColor3 = COLORS.MED,
				BorderSizePixel = 3,
				Position = UDim2.new(0, 0, 0, 0),
				Size = UDim2.new(1, 0, 1, 0),
				ZIndex = 5,
			
				create 'Frame' {
					Name = 'TextContainer',
					BackgroundTransparency = 1,
					Position = UDim2.new(0, -5, 0, 5),
					Size = UDim2.new(1, 0, 1, 0),
					ZIndex = 8,
					
					create 'TextLabel' {
						Name = 'CreatorName',
						BackgroundTransparency = 1,
						Position = UDim2.new(0, 0, 0, 70),
						Size = UDim2.new(1, 0, 1, 0),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size48,
						Text = InfoProvider:GetCreatorName(),
						TextColor3 = COLORS.LIGHT,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Right,
						TextYAlignment = Enum.TextYAlignment.Top
					},
					
					create 'TextLabel' {
						Name = 'GameName',
						BackgroundTransparency = 1,
						Position = UDim2.new(0, 0, 0, 30),
						Size = UDim2.new(1, 0, 1, 0),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size48,
						Text = InfoProvider:GetGameName(),
						TextColor3 = COLORS.LIGHT,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Right,
						TextYAlignment = Enum.TextYAlignment.Top
					},
					
					create 'TextLabel' {
						Name = 'CreatorNamePrefix',
						BackgroundTransparency = 1,
						Size = UDim2.new(1, 0, 1, 0),
						ZIndex = 9,
						Font = Enum.Font.SourceSans,
						FontSize = Enum.FontSize.Size48,
						Text = 'By',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Right,
						TextYAlignment = Enum.TextYAlignment.Top
					},
					
					create 'TextLabel' {
						Name = 'OnYourWay',
						BackgroundTransparency = 1,
						Size = UDim2.new(1, 0, 1, 0),
						ZIndex = 9,
						Font = Enum.Font.SourceSans,
						FontSize = Enum.FontSize.Size36,
						Text = 'You\'re on your way to',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Right,
						TextYAlignment = Enum.TextYAlignment.Top
					}
				}
			}
		},
		
		create 'ImageLabel' {
			Name = 'BackgroundThumbnailVignette',
			BackgroundTransparency = 1,
			Image = IMAGES.BACKGROUND_THUMBNAIL_VIGNETTE,
			Size = UDim2.new(1, 0, 1, 0),
			ZIndex = 3
		},
		
		create 'ImageLabel' {
			Name = 'BackgroundThumbnail',
			BackgroundTransparency = 1,
			Image = IMAGES.GAME_BACKGROUND,
			Size = UDim2.new(1.5, 0, 1.5, 0),
			Position = UDim2.new(-0.5,0,0,0),
			ZIndex = 2
		},
		
		Parent = screenGui
	}
	
	local thumbnailContainer = create 'Frame' {
		Name = 'ThumbnailContainer',
		BackgroundColor3 = COLORS.BLACK,
		BorderColor3 = COLORS.MED,
		BorderSizePixel = 4,
		Position = UDim2.new(0.5, -210, 0.5, -115),
		Size = UDim2.new(0, 420, 0, 230),
		ZIndex = 8,
		
		create 'ImageLabel' {
			Name = 'Thumbnail',
			BorderColor3 = COLORS.DARKMED2,
			BorderSizePixel = 3,
			Image = "",
			Size = UDim2.new(1, 0, 1, 0),
			ZIndex = 8
		},

		create 'Frame' {
			Name = 'LoadingInfoContainer',
			BorderColor3 = COLORS.MED,
			BackgroundColor3 = COLORS.DARKMED,
			BorderSizePixel = 2,
			Position = UDim2.new(0,20,1,0),
			Size = UDim2.new(1,-40,0,40),
			ZIndex = 7,

			create 'TextLabel' {
						Name = 'InstancesLabel',
						BackgroundTransparency = 1,
						Position = UDim2.new(0,0,0,5),
						Size = UDim2.new(0.25, 0, 1, -10),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size14,
						Text = 'Instances',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Center,
						TextYAlignment = Enum.TextYAlignment.Top
					},
			create 'TextLabel' {
						Name = 'InstancesValue',
						BackgroundTransparency = 1,
						Position = UDim2.new(0,0,0,5),
						Size = UDim2.new(0.25, 0, 1, -10),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size14,
						Text = '0',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Center,
						TextYAlignment = Enum.TextYAlignment.Bottom
					},




			create 'TextLabel' {
						Name = 'VoxelsLabel',
						BackgroundTransparency = 1,
						Position = UDim2.new(0.75,0,0,5),
						Size = UDim2.new(0.25, 0, 1, -10),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size14,
						Text = 'Voxels',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Center,
						TextYAlignment = Enum.TextYAlignment.Top
					},
			create 'TextLabel' {
						Name = 'VoxelsValue',
						BackgroundTransparency = 1,
						Position = UDim2.new(0.75,0,0,5),
						Size = UDim2.new(0.25, 0, 1, -10),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size14,
						Text = '0',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Center,
						TextYAlignment = Enum.TextYAlignment.Bottom
					},



			create 'TextLabel' {
						Name = 'ConnectorsLabel',
						BackgroundTransparency = 1,
						Position = UDim2.new(0.5,0,0,5),
						Size = UDim2.new(0.25, 0, 1, -10),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size14,
						Text = 'Connectors',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Center,
						TextYAlignment = Enum.TextYAlignment.Top
					},
			create 'TextLabel' {
						Name = 'ConnectorsValue',
						BackgroundTransparency = 1,
						Position = UDim2.new(0.5,0,0,5),
						Size = UDim2.new(0.25, 0, 1, -10),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size14,
						Text = '0',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Center,
						TextYAlignment = Enum.TextYAlignment.Bottom
					},



			create 'TextLabel' {
						Name = 'BricksLabel',
						BackgroundTransparency = 1,
						Position = UDim2.new(0.25,0,0,5),
						Size = UDim2.new(0.25, 0, 1, -10),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size14,
						Text = 'Bricks',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Center,
						TextYAlignment = Enum.TextYAlignment.Top
					},
			create 'TextLabel' {
						Name = 'BricksValue',
						BackgroundTransparency = 1,
						Position = UDim2.new(0.25,0,0,5),
						Size = UDim2.new(0.25, 0, 1, -10),
						ZIndex = 9,
						Font = Enum.Font.SourceSansBold,
						FontSize = Enum.FontSize.Size14,
						Text = '0',
						TextColor3 = COLORS.LIGHTMED,
						TextStrokeColor3 = COLORS.DARKMED2,
						TextStrokeTransparency = 0,
						TextXAlignment = Enum.TextXAlignment.Center,
						TextYAlignment = Enum.TextYAlignment.Bottom
					},
		},
		
		Parent = screenGui
	}
	
	--
	-- recalculate everything
	while not Game:GetService("CoreGui") do
		wait()
	end
	screenGui.Parent = Game.CoreGui

	MainGui:RecalculateSizes(screenGui)
	
	--
	-- return generated gui
	return screenGui
end

function MainGui:RecalculateTextSize(screenGui)
	local screenSize = screenGui.AbsoluteSize

	local textSizeScale = math.min(screenSize.y/800, 1)
	local closestValidSizePrevIndex = math.floor(textSizeScale*#VALID_TEXT_SIZES)-1
	local closestValidSizePrevIndex2 = closestValidSizePrevIndex-1
	local closestValidTextSize
	local closestValidTextSizePrev
	-- next can't take a 0 because it's a total wuss
	if closestValidSizePrevIndex > 0 then
		_, closestValidTextSize = next(VALID_TEXT_SIZES, closestValidSizePrevIndex)
		if closestValidSizePrevIndex2 > 0 then
			_, closestValidTextSizePrev = next(VALID_TEXT_SIZES, closestValidSizePrevIndex2)
		else
			_, closestValidTextSizePrev = next(VALID_TEXT_SIZES) -- not doing t[1] because this looks cleaner
		end
	else
		_, closestValidTextSize = next(VALID_TEXT_SIZES)
		_, closestValidTextSizePrev = next(VALID_TEXT_SIZES)
	end
	local textSizeEnum = Enum.FontSize['Size'..closestValidTextSize]
	local textSizePrevEnum = Enum.FontSize['Size'..closestValidTextSizePrev]

	if not screenGui:FindFirstChild("MainBackgroundContainer") then return end

	local TextContainer = screenGui.MainBackgroundContainer.BottomBar.BottomBarActual.TextContainer
	local currentYBumpDistance = 0
	TextContainer.OnYourWay.FontSize = textSizePrevEnum
	currentYBumpDistance = currentYBumpDistance + closestValidTextSizePrev*(40/48)
	TextContainer.GameName.Position = UDim2.new(0, 0, 0, currentYBumpDistance)
	TextContainer.GameName.FontSize = textSizeEnum
	currentYBumpDistance = currentYBumpDistance + closestValidTextSize*(40/48)
	TextContainer.CreatorName.Position = UDim2.new(0, 0, 0, currentYBumpDistance)
	TextContainer.CreatorName.FontSize = textSizeEnum
	local currentXBumpDistance = -(TextContainer.CreatorName.TextBounds.X+5)
	TextContainer.CreatorNamePrefix.Position = UDim2.new(0, currentXBumpDistance, 0, currentYBumpDistance)
	TextContainer.CreatorNamePrefix.FontSize = textSizeEnum

	-- recalculate bottom bar size
	local sizeScale = closestValidTextSize/48
	screenGui.MainBackgroundContainer.BottomBar.Size = UDim2.new(1, 0, 0, 300 * sizeScale)
	screenGui.MainBackgroundContainer.BottomBar.Position = UDim2.new(0, 0, 1, -150 * sizeScale)
	screenGui.MainBackgroundContainer.BottomBar.BottomBarActual.Position = UDim2.new(0, -130 * sizeScale,0,0)
end

function MainGui:RecalculateSizes(screenGui)
	local screenSize = screenGui.AbsoluteSize

	-- recalculate thumbnail size
	local thumbnailSizeScale = math.min(math.max(screenSize.y/630, 50/230), 1)
	local thumbnailSize = UDim2.new(0, thumbnailSizeScale*420, 0, thumbnailSizeScale*230)
	local thumbnailPosition = UDim2.new(0.5, -thumbnailSizeScale*420/2, 0.5, -20 - thumbnailSizeScale*230/2 )
	screenGui.ThumbnailContainer.Size = thumbnailSize
	screenGui.ThumbnailContainer.Position = thumbnailPosition

	screenGui.ThumbnailContainer.LoadingInfoContainer.Visible = (screenSize.Y > 500)

	-- update names
	
	-- if we don't have a name yet, keep trying!
	if InfoProvider:GetCreatorName() == '' or InfoProvider:GetGameName() == '' then
		Spawn(function()

			while InfoProvider and InfoProvider:GetCreatorName() == '' or InfoProvider:GetGameName() == '' do
				wait()
			end

			if screenGui and screenGui:FindFirstChild("MainBackgroundContainer") then
				screenGui.MainBackgroundContainer.BottomBar.BottomBarActual.TextContainer.CreatorName.Text = InfoProvider:GetCreatorName()
				screenGui.MainBackgroundContainer.BottomBar.BottomBarActual.TextContainer.GameName.Text = InfoProvider:GetGameName()
			end

			MainGui:RecalculateTextSize(screenGui)
		end)
	else
		screenGui.MainBackgroundContainer.BottomBar.BottomBarActual.TextContainer.CreatorName.Text = InfoProvider:GetCreatorName()
		screenGui.MainBackgroundContainer.BottomBar.BottomBarActual.TextContainer.GameName.Text = InfoProvider:GetGameName()
	end
	
	MainGui:RecalculateTextSize(screenGui)
end

function MainGui:Show()
	currScreenGui = MainGui:GenerateMain()
	currScreenGui.MainBackgroundContainer.Visible = true
	currScreenGui.ThumbnailContainer.Visible = true
	
	currScreenGui.Changed:connect(function(prop)
		if prop == "AbsoluteSize" then
			MainGui:RecalculateSizes(currScreenGui)
		end
	end)
end



---------------------------------------------------------
-- Main Script (show something now + setup connections)

-- start loading assets asap
InfoProvider:LoadAssets()

MainGui:Show()

local guiService = Game:GetService("GuiService")
local instanceCount = 0
local voxelCount = 0
local brickCount = 0
local connectorCount = 0
local setVerb = true

renderSteppedConnection = Game:GetService("RunService").RenderStepped:connect(function()

	instanceCount = guiService:GetInstanceCount()
	voxelCount = guiService:GetVoxelCount()
	brickCount = guiService:GetBrickCount()
	connectorCount = guiService:GetConnectorCount()

	if not currScreenGui then return end

	if setVerb then
		currScreenGui.MainBackgroundContainer.CloseButton:SetVerb("Exit")
		setVerb = false
	end

	currScreenGui.ThumbnailContainer.LoadingInfoContainer.InstancesValue.Text = tostring(instanceCount)
	currScreenGui.ThumbnailContainer.LoadingInfoContainer.BricksValue.Text = tostring(brickCount)
	currScreenGui.ThumbnailContainer.LoadingInfoContainer.ConnectorsValue.Text = tostring(connectorCount)

	if voxelCount <= 0 then
		currScreenGui.ThumbnailContainer.LoadingInfoContainer.VoxelsValue.Text = "0"
	else
		currScreenGui.ThumbnailContainer.LoadingInfoContainer.VoxelsValue.Text = tostring(voxelCount) .." million"
	end
end)

guiService.ErrorMessageChanged:connect(function()
	if guiService:GetErrorMessage() ~= '' then
		currScreenGui.MainBackgroundContainer.ErrorFrame.ErrorText.Text = guiService:GetErrorMessage()
		currScreenGui.MainBackgroundContainer.ErrorFrame.Visible = true
	else
		currScreenGui.MainBackgroundContainer.ErrorFrame.Visible = false
	end
end)

if guiService:GetErrorMessage() ~= '' then
	currScreenGui.MainBackgroundContainer.ErrorFrame.ErrorText.Text = guiService:GetErrorMessage()
	currScreenGui.MainBackgroundContainer.ErrorFrame.Visible = true
end


local forceRemovalTime = 5
local destroyed = false

function removeLoadingScreen()
	if renderSteppedConnection then
		renderSteppedConnection:disconnect()
	end

	if currScreenGui then
		currScreenGui:Destroy()
		currScreenGui = nil
	end

	if script then script:Destroy() end
	destroyed = true
end


function startForceLoadingDoneTimer()
	wait(forceRemovalTime)
	removeLoadingScreen()
end

function gameIsLoaded()
	if Game.ReplicatedFirst:IsDefaultLoadingGuiRemoved() then
		removeLoadingScreen()
	else
		startForceLoadingDoneTimer()
	end
end

Game.ReplicatedFirst.RemoveDefaultLoadingGuiSignal:connect(function()
	removeLoadingScreen()
end)

if Game.ReplicatedFirst:IsDefaultLoadingGuiRemoved() then
	removeLoadingScreen()
	return
end

Game.Loaded:connect(function()
	gameIsLoaded()
end)

if Game:IsLoaded() then
	gameIsLoaded()
end

--------------------------------------------------------------------------
--
-- Animation (make the stuff we are showing look cool)

local blockSize = 10
local blockColor = Color3.new(33/255,66/255,209/255)

local yPosScale = 0
local yPosOffset = -blockSize * 3.5

local tweenStyle = Enum.EasingStyle.Sine
local tweenVelocity = 1500
local tweenTime = (currScreenGui.AbsoluteSize.X/2)/tweenVelocity 

function createBlock()
	local initBlock = Instance.new("Frame")
	initBlock.ZIndex = 5
	initBlock.Size = UDim2.new(0,blockSize,0,blockSize)
	initBlock.BackgroundColor3 = COLORS.DARK
	initBlock.BorderSizePixel = 0
	initBlock.Position = UDim2.new(0,-blockSize,yPosScale,yPosOffset)
	initBlock.Parent = currScreenGui.MainBackgroundContainer.BottomBar
	
	return initBlock
end


local blocks = {}
for i = 1,6 do
	blocks[i] = createBlock()
end

function getYOffset(newSize)
	return yPosOffset - (newSize/3)
end

function rightScreenExit()
	wait(tweenTime * 3)
	if not currScreenGui then return end
	
	local regSize = blocks[6].Size
	local regPos = blocks[6].Position
	
	blocks[6].Size = blocks[1].Size 
	blocks[6].Position = blocks[1].Position
	
	blocks[1].Size =  regSize
	blocks[1].Position = regPos
	
	wait()

	for i = 1,6 do
		local delayTime = tweenTime * (i - 1) * 0.5
		Delay(delayTime, function()
			if not currScreenGui then return end

			local blockIndex = i
			local blockSizeMultiplier = 4 - (i * 0.5)
			
			blocks[blockIndex]:TweenPosition(UDim2.new(1,0,yPosScale,yPosOffset),
							  						Enum.EasingDirection.Out,tweenStyle,
		  					  						tweenTime,true)
			if i == 6 then
				blocks[6]:TweenSizeAndPosition(UDim2.new(0,blockSize,0,blockSize),
												UDim2.new(1,0,yPosScale,yPosOffset),
												Enum.EasingDirection.InOut,tweenStyle,
												tweenTime,true)
					
				wait(tweenTime * 1.1)
				leftScreenEntrance()
			else
				local newSize = blockSize * blockSizeMultiplier
				blocks[6]:TweenSizeAndPosition(UDim2.new(0,newSize,0,newSize),
												UDim2.new(0.5,-newSize/2,yPosScale,getYOffset(newSize)),
												Enum.EasingDirection.InOut,tweenStyle,
												tweenTime * 0.75,true)
			end
		end)
	end
end

function leftScreenEntrance()
	if not currScreenGui then return end

	for i = 1,6 do
		blocks[i].Size = UDim2.new(0,blockSize,0,blockSize)
		blocks[i].Position = UDim2.new(0,-blockSize,yPosScale,yPosOffset)
	end
	
	blocks[1]:TweenPosition(UDim2.new(0.5,-blockSize/2,yPosScale,yPosOffset),Enum.EasingDirection.Out,tweenStyle,tweenTime,true,function()
		for i = 1, 6 do
			local delayTime = tweenTime * (i - 1) * 0.5
			
			Delay(delayTime, function()
				if not currScreenGui then return end

				local blockIndex = i
				local blockSizeMultiplier = 1 + (i * 0.5)
			
				blocks[blockIndex]:TweenPosition(UDim2.new(0.5,-blockSize/2,yPosScale,yPosOffset),
									  Enum.EasingDirection.Out,tweenStyle,
				  					  tweenTime,true)
				
				local newSize = blockSize * blockSizeMultiplier
				blocks[1]:TweenSizeAndPosition(UDim2.new(0,newSize,0,newSize),
											UDim2.new(0.5,-newSize/2,yPosScale,getYOffset(newSize)),
											Enum.EasingDirection.InOut,tweenStyle,
											tweenTime * 0.75,true)
				
				
				if i == 4 then
					rightScreenExit()
				end
			end)
		end
	end)
end

function startLoadingAnimation()
	currScreenGui.MainBackgroundContainer.BackgroundThumbnail:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Linear,20,true)
	leftScreenEntrance()
end


----------------------------------
-- Animation Begin
startLoadingAnimation() 