local f=require(script.Parent:WaitForChild("\066\097\115\101\079\099\099\108\117\115\105\111\110"))local C=setmetatable({},f)C.__index=C function C.new()local c=setmetatable(f.new(),C)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 C.Enable(C,f)C.enabled=f if not f then C:Cleanup()end end function C.GetOcclusionMode(f)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
