return function(B,G,R)debug.profilebegin("\067\111\108\108\105\115\105\111\110 \067\111\110\115\116\114\097\105\110\116")local p={}local r={}for R,c in R do local j=c:GetCollisions(G,B.Radius)if#j>0 then table.insert(r,c:GetObject())end for B,G in j do table.insert(p,G)end end for R,p in p do G=p.ClosestPoint+p.Normal*B.Radius end B.CollisionsData=p B.CollisionHits=r debug.profileend()return G end
return function(self, Position, Colliders)
	debug.profilebegin("Collision Constraint")
	local Collisions = {}
	local HitParts = {}

	for _, Collider in Colliders do
		local ColliderCollisions = Collider:GetCollisions(Position, self.Radius)

		if #ColliderCollisions > 0 then
			table.insert(HitParts, Collider:GetObject())
		end

		for _, Collision in ColliderCollisions do
			table.insert(Collisions, Collision)
		end
	end

	for _, Collision in Collisions do
		Position = Collision.ClosestPoint + (Collision.Normal * self.Radius)
		-- self:ClipVelocity(Position, Collision.Normal) -- This causes some weird glitching issues, not sure why tbh
	end

	self.CollisionsData = Collisions
	self.CollisionHits = HitParts
	debug.profileend()

	return Position
end
