Доходность клеток, ресурсы и работы рабочих
Как складывается доход
В C7Engine/C7GameData/Tile_Yield.cs есть отдельные расчёты пищи, производства и коммерции. Итог строится из базового значения, бонусов и штрафов. Порядок применения: улучшения клетки, городские модификаторы, затем модификаторы игрока и правительства.
Ресурс даёт бонус, если игрок знает открывающую его технологию. Следовательно, графическое наличие ресурса на карте, знание о нём и доступность для производства — разные состояния. Последнее дополнительно зависит от торговой сети.
Для центра города базовая пища принудительно равна 2; производство начинается с 1 щита и учитывает размер города, ресурс и отдельные особенности цивилизации. Коммерция центра учитывает размер, реку и ресурс, а столица имеет минимальный ориентир 4 до последующих модификаторов. В коде остаются TODO по аграрной, коммерческой и морской особенностям. Эти вычисления описывают OpenCiv3, а не все исключения оригинала.
Наличие загрязнения даёт ранний нулевой базовый доход; кратеры уменьшают базовую пищу. Для полного результата нужно учитывать модификаторы, вызываемые после базовой функции.
Улучшения как независимые слои
В C7Engine/C7GameData/TerrainImprovement.cs предусмотрены слои дорог, освоения ресурса, сооружений, руин, загрязнения и кратеров. В каждом слое допускается один вариант улучшения; порядок показа задаёт zIndex. Дорога обновляется в железную дорогу, крепость — в баррикаду. Разрушение может понизить улучшение до предшествующего уровня.
Это лучше единого поля «тип клетки»: лес, дорога, ресурс и крепость должны иметь независимое представление. Допустимые сочетания проверяются правилами слоёв. Источник ограничений: C7Engine/C7GameData/Tile_Overlays.cs.
Рабочие
Terraform описывает действие, доступность, стоимость и результат. Юнит хранит текущее задание и накопленный прогресс. В конце хода владельца рабочий добавляет workerSpeed(); при достаточном суммарном прогрессе работа клетки завершается. Совместная работа нескольких юнитов учитывается суммированием.
Источники: C7Engine/C7GameData/Terraform.cs, C7Engine/C7GameData/MapUnit_Actions.cs, C7Engine/EntryPoints/TurnHandling.cs.
Для нашей игры
Ввести единый калькулятор дохода с расшифровкой «база + ресурс + улучшение + правительство». Тот же результат должны использовать город, подсказка клетки и AI. Работы хранить как многотуровое состояние, а не немедленное редактирование карты.
Проверять совместную работу, смену задания, перемещение рабочего, сохранение незавершённого прогресса и разрушение дороги, которая обеспечивала ресурс. Доступ к ресурсу не следует вычислять только по факту нахождения в границах.