815 lines
24 KiB
Lua
815 lines
24 KiB
Lua
--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() |