Union stops looking at enemy after a short period of time

I’m trying to get a union to look at an enemy for my project, but it looks for a while before stopping. I have no idea why, no errors or anything.

Code:

local towerModule = require(game.ServerScriptService.TowerModule)
local tower = towerModule.Towers[script.Parent.Parent.Name]
local currentUpgradeNo = 0
local currentUpgrade = tower["Upgrade " .. tostring(currentUpgradeNo)]
local range = (currentUpgrade["Range"])
local overlapParams = OverlapParams.new()
overlapParams.FilterDescendantsInstances = game.Workspace.Enemies:GetChildren()
overlapParams.FilterType = Enum.RaycastFilterType.Whitelist
local orderOfEnemies = {}

game:GetService("RunService").Heartbeat:Connect(function()
	local enemyHum
	for i, v in ipairs(orderOfEnemies) do
		table.remove(orderOfEnemies, i)
	end
	local enemies = game.Workspace:GetPartBoundsInRadius(script.Parent.Position, range/2, overlapParams)
	print(enemies)
	for i, v in ipairs(enemies) do
		table.insert(orderOfEnemies, v)
	end
	if #orderOfEnemies > 0 then
		enemyHum = orderOfEnemies[1].Parent:WaitForChild("Humanoid")
		local enemyTorso = enemyHum.Parent:WaitForChild("Torso")
		repeat
			if enemyHum == nil then
				break
			end
			enemyHum.Health-=(currentUpgrade["DPH"])
			script.Parent.CFrame = (CFrame.lookAt(script.Parent.Position, Vector3.new(enemyTorso.Position.X, script.Parent.Position.Y, enemyTorso.Position.Y)))
			task.wait(currentUpgrade["SBH"])
		until (game.Workspace:GetPartBoundsInRadius(script.Parent.Position, range, overlapParams))[1] ~= orderOfEnemies[1] or enemyHum == nil
	else
		return
	end
end)

Am I doing anything wrong?