Я полагаю, pos
- целевой индекс путевой точки, которую вы хотите достичь.
вместо циклов while
и смещения индексов вы можете просто сравнить индексы напрямую:
Допустим, у вас есть список путевых точек, например
[WP0, WP1, WP2, WP3, WP4, ... WPn]
, поэтому доступны индексы от 0
до n
, длина списка n+1
Позволяет сказать currentWayPointID = n
и pos = 2
.
То, что вы хотите знать, это то, быстрее ли идти назад или вперед.Таким образом, вы хотите сравнить, какая разница меньше:
идти назад
n - 2 // simply go steps backwards until reaching 2
или идти вперед, используя виртуальный расширенный список
(n+1) + 2 - n; // add the length of the list to the target index
или визуализировать его
[WP0, WP1, WP2, WP3, WP4, ... WPn]
index: 0, 1, 2, 3, 4, ... n
extended index: n+1+0, n+1+1, n+1+2, n+1+3, n+1+4, ... n+n+1
Итак, чтобы обобщить, вам нужно сначала проверить, находится ли currentwaypointID до или после pos
что-то вроде
bool isForwards = true;
if(currentwaypointID >= pos)
{
if(currentwaypointID - pos < navigationTrack.AllWayPoints.Count + pos - currentwaypointID)
{
isForwards = false;
}
}
else
{
if(pos - currentwaypointID > navigationTrack.AllWayPoints.Count + currentwaypointID - pos)
{
isForwards = false;
}
}
if(isForwards)
{
MoveForward();
}
else
{
MoveBack();
}