add gs
This commit is contained in:
+100
@@ -0,0 +1,100 @@
|
||||
local runService = game:GetService("RunService")
|
||||
|
||||
local ZoneAnimator;
|
||||
|
||||
do
|
||||
local animators = {}
|
||||
|
||||
local function GetAnimator(zone)
|
||||
if animators[zone] then
|
||||
return animators[zone]
|
||||
end
|
||||
local moduleScript = script.Parent:WaitForChild("CameraManager_Zones"):FindFirstChild("CameraManagerZone_" .. tostring(zone))
|
||||
if not moduleScript then
|
||||
return
|
||||
end
|
||||
local animator = require(moduleScript)
|
||||
animators[zone] = animator
|
||||
return animator
|
||||
end
|
||||
|
||||
ZoneAnimator = {
|
||||
CurrentZone = nil;
|
||||
}
|
||||
|
||||
local connection;
|
||||
|
||||
function ZoneAnimator:SetZone(zone)
|
||||
if ZoneAnimator.CurrentZone == zone then
|
||||
return
|
||||
end
|
||||
ZoneAnimator.CurrentZone = zone
|
||||
if connection then
|
||||
connection:disconnect()
|
||||
connection = nil
|
||||
end
|
||||
local animator = GetAnimator(zone)
|
||||
if not animator then
|
||||
return
|
||||
end
|
||||
animator:SetEnabled(true)
|
||||
connection = {
|
||||
disconnect = function()
|
||||
animator:SetEnabled(false)
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
local SkyboxManager;
|
||||
|
||||
do
|
||||
SkyboxManager = {}
|
||||
|
||||
local activeSkybox = nil
|
||||
function SkyboxManager:SetZone(id)
|
||||
if activeSkybox then
|
||||
activeSkybox.Parent = nil
|
||||
activeSkybox:Destroy()
|
||||
activeSkybox = nil
|
||||
end
|
||||
local Skyboxes = game:GetService("ReplicatedStorage"):WaitForChild("Skyboxes")
|
||||
local skybox = Skyboxes:FindFirstChild(id or "default")
|
||||
if skybox then
|
||||
activeSkybox = skybox:Clone()
|
||||
local lighting = game:GetService("Lighting")
|
||||
activeSkybox.Parent = lighting
|
||||
pcall(function()
|
||||
for k, v in pairs(activeSkybox:GetChildren()) do
|
||||
lighting[v.Name] = v.Value
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local ZoneManager = {
|
||||
Zone = nil;
|
||||
}
|
||||
|
||||
local function setZoneInternal(zone)
|
||||
ZoneManager.Zone = zone
|
||||
SkyboxManager:SetZone(zone)
|
||||
ZoneAnimator:SetZone(zone)
|
||||
end
|
||||
|
||||
function ZoneManager:SetZone(zone)
|
||||
if zone == ZoneManager.Zone then
|
||||
return
|
||||
end
|
||||
if runService:IsRunning() then
|
||||
setZoneInternal(zone)
|
||||
else
|
||||
spawn(function()
|
||||
while not runService:IsRunning() do wait() end
|
||||
setZoneInternal(zone)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
return ZoneManager
|
||||
Reference in New Issue
Block a user