local g local X;(camera:GetPropertyChangedSignal("\067\097\109\101\114\097\083\117\098\106\101\099\116")):Connect(function()local g=camera.CameraSubject if g:IsA("\072\117\109\097\110\111\105\100")then X=g.RootPart elseif g:IsA("\066\097\115\101\080\097\114\116")then X=g else X=nil end end)local function m(X)if FFlagUserPoppercamLooseOpacityThreshold then return X.Transparency<.25 and(X.CanCollide and(g~=(X:GetRootPart()or X)and not X:IsA("\084\114\117\115\115\080\097\114\116")))else return X.Transparency<.95 and(X.CanCollide and g~=(X:GetRootPart()or X))end end


local subjectRoot
local subjectPart

camera:GetPropertyChangedSignal('CameraSubject'):Connect(function()
	local subject = camera.CameraSubject
	if subject:IsA('Humanoid') then
		subjectPart = subject.RootPart
	elseif subject:IsA('BasePart') then
		subjectPart = subject
	else
		subjectPart = nil
	end
end)

local function canOcclude(part)
	-- Occluders must be:
	-- 1. Opaque
	-- 2. Interactable
	-- 3. Not in the same assembly as the subject

	if FFlagUserPoppercamLooseOpacityThreshold then
		return
			part.Transparency < 0.25 and
			part.CanCollide and
			subjectRoot ~= (part:GetRootPart() or part) and
			not part:IsA('TrussPart')
	else
		return
			part.Transparency < 0.95 and
			part.CanCollide and
			subjectRoot ~= (part:GetRootPart() or part)
	end
end
