# Доходность клеток, ресурсы и работы рабочих

## Как складывается доход

В [C7Engine/C7GameData/Tile_Yield.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/Tile_Yield.cs) есть отдельные расчёты пищи, производства и коммерции. Итог строится из базового значения, бонусов и штрафов. Порядок применения: улучшения клетки, городские модификаторы, затем модификаторы игрока и правительства.

Ресурс даёт бонус, если игрок знает открывающую его технологию. Следовательно, графическое наличие ресурса на карте, знание о нём и доступность для производства — разные состояния. Последнее дополнительно зависит от торговой сети.

Для центра города базовая пища принудительно равна 2; производство начинается с 1 щита и учитывает размер города, ресурс и отдельные особенности цивилизации. Коммерция центра учитывает размер, реку и ресурс, а столица имеет минимальный ориентир 4 до последующих модификаторов. В коде остаются TODO по аграрной, коммерческой и морской особенностям. Эти вычисления описывают OpenCiv3, а не все исключения оригинала.

Наличие загрязнения даёт ранний нулевой базовый доход; кратеры уменьшают базовую пищу. Для полного результата нужно учитывать модификаторы, вызываемые после базовой функции.

## Улучшения как независимые слои

В [C7Engine/C7GameData/TerrainImprovement.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/TerrainImprovement.cs) предусмотрены слои дорог, освоения ресурса, сооружений, руин, загрязнения и кратеров. В каждом слое допускается один вариант улучшения; порядок показа задаёт `zIndex`. Дорога обновляется в железную дорогу, крепость — в баррикаду. Разрушение может понизить улучшение до предшествующего уровня.

Это лучше единого поля «тип клетки»: лес, дорога, ресурс и крепость должны иметь независимое представление. Допустимые сочетания проверяются правилами слоёв. Источник ограничений: [C7Engine/C7GameData/Tile_Overlays.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/Tile_Overlays.cs).

## Рабочие

`Terraform` описывает действие, доступность, стоимость и результат. Юнит хранит текущее задание и накопленный прогресс. В конце хода владельца рабочий добавляет `workerSpeed()`; при достаточном суммарном прогрессе работа клетки завершается. Совместная работа нескольких юнитов учитывается суммированием.

Источники: [C7Engine/C7GameData/Terraform.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/Terraform.cs), [C7Engine/C7GameData/MapUnit_Actions.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/MapUnit_Actions.cs), [C7Engine/EntryPoints/TurnHandling.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/EntryPoints/TurnHandling.cs).

## Для нашей игры

Ввести единый калькулятор дохода с расшифровкой «база + ресурс + улучшение + правительство». Тот же результат должны использовать город, подсказка клетки и AI. Работы хранить как многотуровое состояние, а не немедленное редактирование карты.

Проверять совместную работу, смену задания, перемещение рабочего, сохранение незавершённого прогресса и разрушение дороги, которая обеспечивала ресурс. Доступ к ресурсу не следует вычислять только по факту нахождения в границах.

