local l=require(script.Parent:WaitForChild("\066\097\115\101\079\099\099\108\117\115\105\111\110"))local V=setmetatable({},l)V.__index=V function V.new()local C=setmetatable(l.new(),V)C.char=nil C.humanoidRootPart=nil C.torsoPart=nil C.headPart=nil C.childAddedConn=nil C.childRemovedConn=nil C.behaviors={}C.behaviors[MODE.LIMBS]=C.LimbBehavior C.behaviors[MODE.MOVEMENT]=C.MoveBehavior C.behaviors[MODE.CORNERS]=C.CornerBehavior C.behaviors[MODE.CIRCLE1]=C.CircleBehavior C.behaviors[MODE.CIRCLE2]=C.CircleBehavior C.behaviors[MODE.LIMBMOVE]=C.LimbMoveBehavior C.behaviors[MODE.SMART_CIRCLE]=C.SmartCircleBehavior C.behaviors[MODE.CHAR_OUTLINE]=C.CharacterOutlineBehavior C.mode=MODE.SMART_CIRCLE C.behaviorFunction=C.SmartCircleBehavior C.savedHits={}C.trackedLimbs={}C.camera=game.Workspace.CurrentCamera C.enabled=false return C end function V.Enable(V,l)V.enabled=l if not l then V:Cleanup()end end function V.GetOcclusionMode(l)return Enum.DevCameraOcclusionMode.Invisicam end
--
local BaseOcclusion = require(script.Parent:WaitForChild("BaseOcclusion"))
local Invisicam = setmetatable({}, BaseOcclusion)
Invisicam.__index = Invisicam

function Invisicam.new()
	local self = setmetatable(BaseOcclusion.new(), Invisicam)

	self.char = nil
	self.humanoidRootPart = nil
	self.torsoPart = nil
	self.headPart = nil

	self.childAddedConn = nil
	self.childRemovedConn = nil

	self.behaviors = {} 	-- Map of modes to behavior fns
	self.behaviors[MODE.LIMBS] = self.LimbBehavior
	self.behaviors[MODE.MOVEMENT] = self.MoveBehavior
	self.behaviors[MODE.CORNERS] = self.CornerBehavior
	self.behaviors[MODE.CIRCLE1] = self.CircleBehavior
	self.behaviors[MODE.CIRCLE2] = self.CircleBehavior
	self.behaviors[MODE.LIMBMOVE] = self.LimbMoveBehavior
	self.behaviors[MODE.SMART_CIRCLE] = self.SmartCircleBehavior
	self.behaviors[MODE.CHAR_OUTLINE] = self.CharacterOutlineBehavior

	self.mode = MODE.SMART_CIRCLE
	self.behaviorFunction = self.SmartCircleBehavior

	self.savedHits = {} 	-- Objects currently being faded in/out
	self.trackedLimbs = {}	-- Used in limb-tracking casting modes

	self.camera = game.Workspace.CurrentCamera

	self.enabled = false
	return self
end

function Invisicam:Enable(enable)
	self.enabled = enable

	if not enable then
		self:Cleanup()
	end
end

function Invisicam:GetOcclusionMode()
	return Enum.DevCameraOcclusionMode.Invisicam
end
