У меня есть приборная панель x,y 10x10. У меня есть массив пунктов назначения x, y, из которых мне нужно найти ближайший и его путь.
У меня также есть массив мягких столкновений и массив постоянных столкновений.
Я использую пакет поиска пути, чтобы найти путь. Я устанавливаю постоянные столкновения так:
//set collisions
for(let i = 0; i < mapData.collisions.length; i++) {
grid.setWalkableAt(mapData.collisions[i].x, mapData.collisions[i].y, false);
}
и я нахожу фактическую ближайшую координату и ее путь следующим образом:
//find actual closest coordinate and its path
for(let i = 0; i < destinationCoords.length; i++) {
currentGrid = grid.clone();
currentPath = finder.findPath(heroCoords.x, heroCoords.y, destinationCoords[i].x, destinationCoords[i].y, currentGrid);
if (currentPath && currentPath.length !== 0 && currentPath.length < closestPathLength) {
closestPathLength = currentPath.length;
closestPath = currentPath;
closestCoords = destinationCoords[i];
}
}
теперь проблема в том, что если у меня есть следующая панель инструментов:
где желтый — начальная точка, зеленый — конечная точка, а розовый — мягкое столкновение, он просто пройдет через розовую плитку.
Но чего я хочу добиться, так это избежать мягких столкновений. Таким образом, путь будет:
Но когда нет другого варианта, путь будет таким:
Есть идеи?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Кажется, что подходящей стратегией будет два запуска два прохода:
1) Пометить как постоянные, так и мягкие столкновения как непроходимые.
2) Если решений нет, помечать как непроходимые только постоянные столкновения.
Если решений по-прежнему нет, значит, нет проходимого пути.
Хм, не знаю, почему я не подумал об этом. Спасибо, я попробую, и если все будет хорошо, я отмечу этот ответ