Нужна помощь в модификации алгоритма поиска пути

Я делаю бота, который умеет обегать динамично появляющиеся преграды. В параллельных потоках должны выполнятся алгоритм поиска пути и следование по нему. Беда в асинхронной работе двух потоков. На поиск пути затрачивается время и по истечению которого после 1-го обновления маршрута получается так, что персонаж следует по старому пути, а после его замены разворачивается на 360 т.к. алгоритм поиска пути отталкивается от координат бота в определённое время и за время пока алгоритм рассчитывает путь бот успевает пробежать некоторое расстояние по старому маршруту.

главный поток:

main_thread = lua_thread.create_suspended(function()

while true do
    if cyclogramm == 1 then
        targetPoint = endPoint
        pathFinder_thread:run()
        repeat wait(0) until pathUpdate
        ::mark::
        pathUpdate = false
        if #path > 0 then
            for i, v in pairs(path) do
                if pathUpdate then goto mark end
                go_to_point(v, true)
            end
            pathFinder_thread:terminate()
            break
        else
            wait(0)
            goto mark
        end
    end

    wait(0)
end
reset()
end)

поток с алгоритмом:

pathFinder_thread = lua_thread.create_suspended(function()
while true do
    local mx, my, mz = getCharCoordinates(playerPed)
    local activePoint = {math.floor(mx), math.floor(my)}
    local open_list = {}
    local closed_list = {}

    local _path = {}

    while true do 
        wait(0)
        for i, v in pairs(map[activePoint[1]][activePoint[2]]) do
            if check_table(v, closed_list) and isLineOfSightClear(activePoint[1], activePoint[2], mz, v[1], v[2], mz, true, true, true, true, false) then
                local weight = get_dist1(v, targetPoint) + get_dist2({mx, my}, v)
                table.insert(open_list, {v, weight})
            end
        end
        if #open_list > 0 then
            table.insert(closed_list, activePoint)
            activePoint = get_nearest_point(open_list)
            table.insert(_path, activePoint)
            open_list = {}
            if activePoint[1] == targetPoint[1] and activePoint[2] == targetPoint[2] then 
                break
            end
        end
    end
    path = _path
    pathUpdate = true
    wait(2000)
end
end)

Ответы (1 шт):

Автор решения: Никита Самоуков

Пусть построенный путь это ломанная линия в пространстве.

После того как путь найден, нужно найти точку, которая на пути соответствует положению текущему.

Десяти первых частей должно быть достаточно. Соответственно взять расстояние до первых десяти отрезков, где меньшее там и есть точка старта нового пути.

→ Ссылка