Hi all, I am trying to compose a function that keeps a part suspended at a constant height from a hit position, using bodythrusts. The below is what I have thus far, but I know that my logic behind applying the force is incorrect, as it thrusts up past the given height, and falls down. I would appreciate if anyone can at least help me solve this dilemma. Thanks!

local thrust = {}

local RunService = game:GetService("RunService")

local function getmass(part)
	return part:GetMass()*workspace.Gravity
end


function thrust:hover(thruster, height, a)
	local mass = getmass(thruster)
	local force = mass * a
	local obj = thruster:FindFirstChild("thrust") --//BodyThrust
	RunService.RenderStepped:connect(function()
		local r = Ray.new(thruster.Position, thruster.CFrame.upVector * -30)
		local ignore = {thruster}
		local part, pos, face = workspace:FindPartOnRayWithIgnoreList(r, ignore, false, true)
		local distance =(thruster.Position - pos).magnitude
		obj.Force = Vector3.new(0, (height/distance)*force, 0)
	end)
end



return thrust

Script calling hover:

require(game.ReplicatedStorage.ModuleScript):hover(script.Parent, 3, 2)