103 lines
2.3 KiB
Lua
103 lines
2.3 KiB
Lua
--[[
|
|
// LoadingWidget.lua
|
|
|
|
// Created by Kip Turner
|
|
// Copyright Roblox 2015
|
|
]]
|
|
local CoreGui = game:GetService("CoreGui")
|
|
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
|
local Modules = GuiRoot:FindFirstChild("Modules")
|
|
local ShellModules = Modules:FindFirstChild("Shell")
|
|
|
|
local Utility = require(ShellModules:FindFirstChild('Utility'))
|
|
|
|
local function CreateLoadingWidget(properties, loadingFunctions)
|
|
properties = properties or {}
|
|
loadingFunctions = loadingFunctions or {}
|
|
|
|
local this = {}
|
|
|
|
local completedFunctions = {}
|
|
local cancelled = false
|
|
local ImageTransparency = properties.ImageTransparency or 0
|
|
local finishedConn = Utility.Signal()
|
|
|
|
local loadIcon = Utility.Create'ImageLabel'
|
|
{
|
|
Name = "LoadIcon";
|
|
BackgroundTransparency = 1;
|
|
Image = 'rbxasset://textures/ui/Shell/Icons/LoadingSpinner@1080.png';
|
|
Size = properties.Size or UDim2.new(0, 100, 0, 100);
|
|
ZIndex = properties.ZIndex or 7;
|
|
Parent = properties.Parent;
|
|
ImageTransparency = ImageTransparency;
|
|
AnchorPoint = Vector2.new(0.5, 0.5);
|
|
Position = properties.Position or UDim2.new(0.5, 0, 0.5, 0);
|
|
}
|
|
|
|
if properties.Visible == false then
|
|
loadIcon.Visible = false
|
|
end
|
|
|
|
local function isLoadingComplete()
|
|
return #completedFunctions == #loadingFunctions
|
|
end
|
|
|
|
function this:AwaitFinished()
|
|
if isLoadingComplete() then
|
|
return true
|
|
end
|
|
finishedConn:wait()
|
|
if cancelled then
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
function this:Cleanup()
|
|
loadIcon.Parent = nil
|
|
loadIcon.ImageTransparency = 1
|
|
loadIcon:Destroy()
|
|
cancelled = true
|
|
end
|
|
|
|
function this:SetTransparency(transparency)
|
|
ImageTransparency = transparency
|
|
end
|
|
|
|
function this:SetParent(parent)
|
|
loadIcon.Parent = parent
|
|
end
|
|
|
|
function this:GetTransparency()
|
|
return ImageTransparency
|
|
end
|
|
|
|
-- Run it!
|
|
for _, loadingFunction in pairs(loadingFunctions) do
|
|
spawn(function()
|
|
loadingFunction()
|
|
table.insert(completedFunctions, loadingFunction)
|
|
end)
|
|
end
|
|
|
|
spawn(function()
|
|
local t = tick()
|
|
while not (cancelled or isLoadingComplete()) do
|
|
local now = tick()
|
|
local rotation = (now - t) * 360
|
|
if loadIcon.Parent then
|
|
loadIcon.ImageTransparency = ImageTransparency
|
|
loadIcon.Rotation = loadIcon.Rotation + rotation
|
|
end
|
|
t = now
|
|
wait()
|
|
end
|
|
finishedConn.fire()
|
|
end)
|
|
|
|
return this
|
|
end
|
|
|
|
return CreateLoadingWidget
|