-- Compiled with roblox-ts v3.0.0-dev-834585a local TS = _G[script] local clientWorldsMap = TS.import(script, script.Parent, "clientWorldsMap").clientWorldsMap local componentNameCtorMap = TS.import(script, script.Parent, "componentNameCtorMap").componentNameCtorMap --[[ * * Should be invoked by the remote handler. * * @client ]] local function syncClient(world, payload) local _world = world local entityIdMap = clientWorldsMap[_world] if not entityIdMap then entityIdMap = {} local _world_1 = world local _entityIdMap = entityIdMap clientWorldsMap[_world_1] = _entityIdMap end for serverEntityId, components in payload do local clientEntityId = entityIdMap[serverEntityId] if clientEntityId ~= nil and (next(components)) == nil then if world:contains(clientEntityId) then world:despawn(clientEntityId) end entityIdMap[serverEntityId] = nil continue end local componentsToInsert = {} local componentsToRemove = {} local insertNames = {} local removeNames = {} for componentName, componentData in components do local component = componentNameCtorMap[componentName] if not component then continue end local data = componentData.data if data ~= nil then local _arg0 = component(data) table.insert(componentsToInsert, _arg0) table.insert(insertNames, componentName) else table.insert(componentsToRemove, component) table.insert(removeNames, componentName) end end if not (clientEntityId ~= 0 and clientEntityId == clientEntityId and clientEntityId) then if #componentsToInsert == 0 then continue end clientEntityId = world:spawn(unpack(componentsToInsert)) local _entityIdMap = entityIdMap local _clientEntityId = clientEntityId _entityIdMap[serverEntityId] = _clientEntityId else if not (#componentsToInsert == 0) then world:insert(clientEntityId, unpack(componentsToInsert)) end if not (#componentsToRemove == 0) then world:remove(clientEntityId, unpack(componentsToRemove)) end end end end return { syncClient = syncClient, }