So I'm making a PBB trainer battle style thing, and when you walk in front of a trainer, I want it to wave and then walk towards you. It's waving, but it takes like 20 seconds to walk towards you after that. Here is my code:

function module:WalkTo(model, point, speed)
	if not model then return end

	local root = model:FindFirstChild('HumanoidRootPart')
	local humanoid = model:FindFirstChild('Humanoid')

	if not root then return end

	local prespeed = humanoid.WalkSpeed

	humanoid.WalkSpeed = speed or humanoid.WalkSpeed

	local initialDirection = ((point-root.Position)*flat).Unit

	while true do
		local direction = ((point-root.Position)*flat).Unit

		if math.deg(math.acos(direction:Dot(initialDirection))) > 80 then break end
		if not humanoid or not humanoid.Parent then return end

		print("Moving")

		humanoid:Move(direction)

		runService.RenderStepped:Wait()
	end

	humanoid:Move(Vector3.zero)
	humanoid.WalkSpeed = prespeed
end

while true do
	wait()
	for i, v in pairs(trainers) do
		raycastparams.FilterDescendantsInstances = { v }
		raycastparams.FilterType = Enum.RaycastFilterType.Blacklist

		local raycast = workspace:Raycast(v.HumanoidRootPart.Position, v.HumanoidRootPart.CFrame.LookVector*100, raycastparams)

		if raycast then
			if raycast.Instance.Parent:FindFirstChild("Humanoid") then
				game.ReplicatedStorage.Events.SetPlayerMovespeed:FireServer(0, "code")
				
				local animToPlay = v.Humanoid.Animator:LoadAnimation(script.Parent.WaveAnimation)
				animToPlay:Play()

				local playerPos = raycast.Instance.Parent.PrimaryPart.Position
				
				print(playerPos)
				
				wait()

				module:WalkTo(v, playerPos, 16)

				module:say(require(v.Interact).lines, game.Players.LocalPlayer:GetMouse(), v, false, true, v)
			end
		end
	end
end

Any help?