So, I'm trying to make a sentry type thing that fires projectiles when it's "lane" is activated:

repeat wait() until script.Parent.base.Value ~= nil

local values = game.Workspace.values
local lanes = values.lanes
local myLane = lanes:FindFirstChild(script.Parent.base.Value)
local rs = game:GetService("RunService")


function fire()
	local projectile = Instance.new("Part")
	projectile.Size = Vector3.new(1,1,1)
	projectile.BrickColor = BrickColor.new("Dark Green")
	projectile.CanCollide = false
	projectile.Anchored = true
	projectile.CFrame = CFrame.new(script.Parent.head.Position.X + 3,script.Parent.head.Position.Y,script.Parent.head.Position.Z)
	projectile.Parent = script.Parent
	spawn(function()
		local projectileC = projectile
		local touch = projectileC.Touched:connect(function(t)end)
		repeat
			wait(.1)
			projectileC.Position = Vector3.new(projectileC.Position.X + 1,projectileC.Position.Y,projectileC.Position.Z)
		until touch
		print(touch)
	end)
end

while true do
	wait(1)
	if myLane.Value == true then
		fire()
	end
end

I know I could have the sentry and the projectiles run off of two different scripts to make things easier, but I don't want easy, I want to try to condense everything into one script to make the game run more efficiently. I'm attempting to do this by having a fire() function that creates a projectile when the sentries lane is activated and then having a spawn() function handle each projectiles movement. This works as it should, if i replace the code underneath the spawn() function with "while true do" and then the line that makes the projectile move, each projectile moves on its own as it should. However, i want the projectiles to move forward until they come into contact with another part. I'm attempting to do this by defining a touched() function as a variable and having the part repeat its movements until the touched function is fired. The problem is the part moves forward like 1-2 times before stopping in mid air (not touching anything, not even the part of the sentry it was fired from). I try to print the touch functions value to see what exactly it's touching, but all that gets printed to the output is "Connection". Any idea why this is happening? I'm assuming I'm misusing the touch function somehow, but I can't figure it out.

All help is appreciated!