Скажите, а в последних версиях (после релиза 110418) не было ли обновления итератора? Что-то сейчас он стал явно тяготеть к правой стороне. До идиотизма доходит, когда правая половина экрана заполнена уже практически полностью, а левая - ни одного тайла. Такое впечатление сложилось после проверки глазками последовательности отображения, что центр экрана считается на 1 тайл правее реального. Раньше было правильнее.
Конкретнее, перебор идёт такой (координаты x,y=0,0 - центр экрана, перед проверкой экран отцентрирован в центр тайла): (1,0), (2,-1), (2,0), (2,1), (1,1), (0,1), (0,0), (0,-1), (1,-1), (2,-2), (3,-2), (3,-1), (3,0), (3,1), (3,2), (2,2), (1,2), (0,2), (-1,2), (-1,1), (-1,0), (-1,-1), (-1,-2), (0,-2), (1,-2), <пауза где-то на время 3-х тайлов>, (-2,2), (-2,1), (-2,0), (-2,-1), (-2,-2), (-3,2), (-3,-1), (-3,0), (-3,-1), (-3,-2).
Экран у меня 1680х1050, покрывается тайлами 7х5 с запасом. Видно что перебор смещён вправо на тайл. И непонятно с какой радости берётся пауза, ведь не отображаемые тайлы не должны проверяться, а тут похоже идёт проверка координаты (+4,..). И вот в момент когда заполнен тайл (0,2) практически половина экрана (правая) заполнена, а вся левая пустая. Некрасиво.
Оформлять это багом в багтрекере? Или это не баг, а так и задумано?
И вдобавок пожелание сделать спираль не квадратной, а сплюснутой. В соотношении 4:3 или 16:9, смотря какой экран. А то сейчас тоже странно работает, сначала перебирает тайлы на границе экрана сверху/снизу, а слева/справа ещё есть пустые полностью помещающиеся на экран тайлы. Для экрана 7х5 (в тайлах) считаю более правильной последовательность (0,0), (1,0), (1,1), (0,1), (-1,1), (-1,0), (-1,-1), (0,-1), (1,-1),
(2,-1), (2,0), (2,1), (-2,1), (-2,0), (-2,-1), (3,-1), (3,0), (3,1), (3,2), (2,2), (1,2), (0,2), (-1,2), (-2,2), (-3,2), (-3,1), (-3,0), (-3,-1), (-3,-2), (-2,-2), (-1,-2), (0,-2), (1,-2), (2,-2), (3,-2). Изменение в порядке обхода выделил жирным. Для других размеров экранов аналогично. Общую формулу думать лень, но если надо, напишу. Но учитывая размеры экранов, может вообще забить последовательность в виде массива смещений const int dxy[11*9]=(...) прям по цифрам выше? И в процедуре Next просто идти по индексу массива и проверять попадание результирующих координат в ограничивающий прямоугольник? Памяти полкилобайта не так уж и жалко ... Да, не универсально. Зато для существующих экранов сойдёт, да и модифицировать тривиально.