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