Untitled
unknown
plain_text
10 months ago
2.5 kB
6
Indexable
--!Type(ClientAndServer)
--!SerializeField
local cameras : {GameObject} = nil
local CameraManager = {}
local cameraRequestEvent = Event.new("CameraRequest")
local cameraResponseEvent = Event.new("CameraResponse")
-- Number of cameras to use for random switching
local cameraCount = 3
-- Method to set the active camera
function CameraManager.SetActiveCamera(index: number)
for i, camera in ipairs(cameras) do
if camera then
camera:SetActive(i == index)
end
end
-- Send the active camera index to the server
CameraManager.SendActiveCameraIndexToServer(index)
end
-- Method to send the active camera index to the server
function CameraManager.SendActiveCameraIndexToServer(index: number)
-- Fire an event to notify the server
cameraRequestEvent:Fire(index)
end
-- Method to randomly change the active camera every 10 seconds with a delay
function CameraManager.StartRandomCameraSwitching()
local function switchCamera()
if cameraCount > 0 then
local randomIndex = math.random(1, cameraCount)
Timer.After(0.1, function() -- Add a 0.1 second delay
CameraManager.SetActiveCamera(randomIndex)
end)
else
print("No cameras available to switch.")
end
end
-- Start the timer to switch cameras every 10 seconds
Timer.Every(10, switchCamera)
end
-- Server-side logic
function CameraManager:serverawake()
-- Listen for camera request events from clients
cameraRequestEvent:Connect(function(index)
-- Set the active camera index and notify all clients
ServerCameraManager.SetActiveCameraIndex(index)
cameraResponseEvent:FireAllClients(index)
end)
-- Initialize the random camera switching only in server awake
CameraManager.StartRandomCameraSwitching()
end
ServerCameraManager = {}
-- Variable to store the active camera index
ServerCameraManager.activeCameraIndex = 1
-- Method to set the active camera index and notify clients
function ServerCameraManager.SetActiveCameraIndex(index: number)
ServerCameraManager.activeCameraIndex = index
ServerCameraManager.NotifyClients(index)
end
-- Method to notify clients about the active camera index
function ServerCameraManager.NotifyClients(index: number)
-- Fire an event to notify all clients
cameraResponseEvent:FireAllClients(index)
end
return CameraManager
Editor is loading...
Leave a Comment