Карта мира, координаты и генерация
Изометрическая сетка
В C7Engine/C7GameData/GameMap.cs хранятся ширина, высота, клетки, континенты, точки старта и независимые флаги замыкания по X и Y. Это смещённая сетка: на чётной строке допустимы чётные X, на нечётной — нечётные. Поэтому число реальных клеток равно width × height / 2, а не произведению размеров.
Индекс вычисляется как Y × width / 2 + (Y чётное ? X / 2 : (X − 1) / 2). Соседи строятся по восьми направлениям; выход за незамкнутый край возвращает Tile.NONE. Сравнение расстояний и поиск маршрута должны учитывать замыкание карты.
Для нашего массива tiles[y*w+x] требуется явное преобразование координат. Простая подстановка размеров из BIQ удвоит ожидаемую плотность и нарушит соседство.
Генератор по этапам
В GenerateMap параметры включают landform, ocean coverage, climate, temperature, age, размер, варварскую активность и seed. Вызовы идут в следующем порядке:
- Проверка размеров; нечётная ширина или высота уменьшается на единицу.
- Форма суши и переходы суша → coast → sea → ocean.
- Холмы и горы.
- Разбиение суши на регионы биомов и назначение биомов.
- Растительность и реки.
- Поймы на подходящих пустынных клетках вдоль рек.
- Ресурсы и бонусные луга.
- Позиции игроков и лагеря варваров.
- Индексы графических вариантов местности.
Используются карты высот и случайные блуждания; разные этапы создают Random(seed + константа). Ресурсы размещаются с учётом типов местности; роскошь обрабатывается отдельно от стратегических и бонусных ресурсов. Это собственный генератор OpenCiv3, не восстановленный алгоритм Firaxis.
Видимость и знания
C7Engine/C7GameData/AIData/TileKnowledge.cs различает известные клетки, границу разведки и активную видимость. Рельеф влияет на обзор; радар расширяет его по правилу RadarTileVisibility. Это полезная модель для fog of war, но код следует дополнительно проверять на владение юнитом и пограничные случаи.
Для нашей игры
Сохранять seed, параметры и версию генератора; отделить координаты модели от экранной проекции. Валидировать достижимость стартовых позиций, доступ к воде и основные ресурсы, а также замкнутые края. Размеры в интерфейсе показывать в понятных игроку клетках.
Генератор уже вызывает создание лагерей, хотя ниже сохранился старый TODO о лагерях и goody huts. Отсутствие лагерей по одному комментарию было бы ошибочным выводом. Minor tribes остаются отдельной задачей #934.