chore: refractor
This commit is contained in:
83
ReplicatedStorage/Client/Bootstrap.lua
Normal file
83
ReplicatedStorage/Client/Bootstrap.lua
Normal file
@@ -0,0 +1,83 @@
|
||||
--!native
|
||||
--!optimize 2
|
||||
|
||||
local Players = game:GetService("Players")
|
||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
local LoadingScreen = require(ReplicatedStorage.Client.LoadingScreen)
|
||||
local ModLoader = require(ReplicatedStorage.Shared.ModLoader)
|
||||
local ChunkManager = require(ReplicatedStorage.Shared.ChunkManager)
|
||||
local PlacementManager = require(ReplicatedStorage.Shared.PlacementManager)
|
||||
|
||||
local Bootstrap = {}
|
||||
|
||||
local started = false
|
||||
|
||||
local function ensureFlag(name: string)
|
||||
local objects = ReplicatedStorage:WaitForChild("Objects")
|
||||
local existing = objects:FindFirstChild(name)
|
||||
if existing and existing:IsA("BoolValue") then
|
||||
return existing
|
||||
end
|
||||
local ready = Instance.new("BoolValue")
|
||||
ready.Name = name
|
||||
ready.Value = true
|
||||
ready.Parent = objects
|
||||
return ready
|
||||
end
|
||||
|
||||
local contentProvider = game:GetService("ContentProvider")
|
||||
|
||||
local function waitForGameLoaded()
|
||||
if game:IsLoaded() then
|
||||
return
|
||||
end
|
||||
game.Loaded:Wait()
|
||||
end
|
||||
|
||||
function Bootstrap.start()
|
||||
if started then
|
||||
return
|
||||
end
|
||||
started = true
|
||||
|
||||
contentProvider:PreloadAsync(game:GetDescendants())
|
||||
|
||||
ensureFlag("ClientReady")
|
||||
local screen = LoadingScreen.mount()
|
||||
|
||||
screen.setStatus("Connecting...")
|
||||
screen.setDetail("Waiting for server")
|
||||
screen.setProgress(0.2)
|
||||
|
||||
task.wait(1)
|
||||
|
||||
waitForGameLoaded()
|
||||
|
||||
local modsFolder = ReplicatedStorage:WaitForChild("Mods")
|
||||
local totalMods = #modsFolder:GetChildren()
|
||||
local modProgressWeight = 0.6
|
||||
|
||||
ModLoader.loadModsC(function(index, total, modInstance, success)
|
||||
total = total > 0 and total or math.max(totalMods, 1)
|
||||
local ratio = index / total
|
||||
screen.setStatus(`Modloading progress: {index}/{total}`)
|
||||
screen.setDetail(`Loading {modInstance.Name}`)
|
||||
screen.setProgress(0.05 + ratio * modProgressWeight)
|
||||
if not success then
|
||||
screen.setDetail(`Failed loading {modInstance.Name}; continuing`)
|
||||
end
|
||||
end)
|
||||
|
||||
ensureFlag("CSMLLoaded") -- needed
|
||||
|
||||
screen.setStatus("Joining world...")
|
||||
screen.setDetail("Syncing with server")
|
||||
screen.setProgress(0.7)
|
||||
|
||||
task.wait(0.5)
|
||||
|
||||
screen.close()
|
||||
end
|
||||
|
||||
return Bootstrap
|
||||
Reference in New Issue
Block a user