Untitled

 avatar
unknown
plain_text
12 days ago
2.5 kB
2
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
Leave a Comment