TimberCommons - ihsoft/TimberbornMods GitHub Wiki

Timber Commons: оросительные башни

TimberCommons предоставляет переиспользуемые компоненты оросительных башен, которые другие моды могут добавлять в свои здания.

Текущая публичная поверхность сосредоточена вокруг:

Если ваш мод использует эти компоненты, добавьте TimberCommons в зависимости:

{
  "Id": "Timberborn.IgorZ.TimberCommons",
  "MinimumVersion": "1.16.0"
}

Указывайте минимальную версию, которая соответствует API, на который вы опираетесь.

Как работает орошение

Оросительная башня поддерживает полную влажность на достижимых клетках, пока башня активна.

Важные особенности:

  • Дальность орошения считается от границы здания, а не от центра здания.
  • Орошаться могут только клетки на базовом Z-уровне башни.
  • Клетки должны быть соединены с башней через ортогональных соседей. Одной диагональной связи недостаточно.
  • Разрывы рельефа, другие высоты и полные барьеры влажности блокируют распространение орошения.
  • Эффективная дальность меняется вместе с эффективностью здания.
  • Coverage - это отношение текущих достижимых клеток к максимальному покрытию на плоской поверхности.
  • Потребление масштабируется по Coverage, поэтому башня, которая может достичь меньше клеток, потребляет меньше ресурсов.

IrrigationTower - базовый компонент. В большинстве модов лучше использовать один из готовых компонентов ниже, а не наследоваться от него.

Башня с потреблением товара

Используйте GoodConsumingIrrigationTower для простой башни, которая работает от одного потребляемого товара, обычно воды.

Она работает вместе со стандартным компонентом Timberborn GoodConsumingBuilding:

  • Здание потребляет ровно один товар.
  • Башня орошает, пока good-consuming building может потреблять товар и потребление не поставлено на паузу.
  • Настроенная скорость потребления должна быть максимальной скоростью для полного покрытия.
  • Во время игры TimberCommons масштабирует скорость потребления по Coverage.
  • Если на здании есть компоненты IRangeEffect, все они применяются, пока орошение активно.
  • EffectGroup игнорируется для этого типа башни.

Spec башни - GoodConsumingIrrigationTowerSpec:

{
  "GoodConsumingIrrigationTowerSpec": {
    "IrrigationRange": 12,
    "IrrigateFromGroundTilesOnly": true
  }
}

Поля:

  • IrrigationRange - максимальная дальность орошения от границы здания.
  • IrrigateFromGroundTilesOnly - если true, стартовыми точками считаются только foundation tiles, помеченные как ground-only. Значение по умолчанию: true.

Башня на базе Manufactory

Используйте ManufactoryIrrigationTower, когда орошение должно управляться рецептами.

Она работает вместе со стандартным компонентом Timberborn Manufactory:

  • Башня выступает production executor.
  • Не добавляйте другой production executor на то же здание, например workplace или ProductionIncreaser.
  • Башня орошает, пока manufactory готова производить.
  • Производственный прогресс идет, пока возможно орошение.
  • Длительность рецепта корректируется по Coverage, поэтому потребление ингредиентов масштабируется по площади, которую реально можно орошать.
  • Range effects можно выбирать для каждого рецепта через маппинг Effects.

Spec башни - ManufactoryIrrigationTowerSpec:

{
  "ManufactoryIrrigationTowerSpec": {
    "IrrigationRange": 12,
    "IrrigateFromGroundTilesOnly": true,
    "Effects": [
      "MyMod.WaterOnly=wet",
      "MyMod.FertilizedWater=fertilized"
    ]
  }
}

Поля:

  • IrrigationRange - максимальная дальность орошения от границы здания.
  • IrrigateFromGroundTilesOnly - если true, стартовыми точками считаются только foundation tiles, помеченные как ground-only. Значение по умолчанию: true.
  • Effects - соответствия рецептов и групп эффектов в формате <recipe id>=<effect group>.

Когда текущий рецепт меняется, TimberCommons сбрасывает эффекты старого рецепта и применяет эффекты, соответствующие группе нового рецепта.

Range effects

Range effects - это необязательные компоненты, которые реагируют на состояние орошения.

Интерфейс - IRangeEffect:

  • EffectGroup задает группу эффекта.
  • ApplyEffect(HashSet<Vector3Int> tiles) применяет эффект к текущим достижимым клеткам.
  • ResetEffect() удаляет эффект, примененный последним вызовом ApplyEffect.

Несколько эффектов могут использовать одну и ту же группу. В этом случае все подходящие эффекты применяются вместе.

Эффект скорости роста

ModifyGrowableGrowthRangeEffect меняет скорость роста growables в радиусе действия.

{
  "ModifyGrowableGrowthRangeEffectSpec": {
    "EffectGroup": "fertilized",
    "GrowthRateModifier": 25.0,
    "ComponentsFilter": [
      "Timberborn.Forestry.TreeComponent"
    ],
    "PrefabNamesFilter": []
  }
}

Поля:

  • EffectGroup - имя группы, используемое в ManufactoryIrrigationTowerSpec.Effects.
  • GrowthRateModifier - относительный процент. 25.0 означает +25%, -10.0 означает -10%.
  • ComponentsFilter - необязательные полные имена типов компонентов, которые должны быть у growable.
  • PrefabNamesFilter - необязательные точные имена prefab'ов, на которые действует эффект.

Если несколько модификаторов роста влияют на один growable, однотипные модификаторы не складываются. TimberCommons использует самый сильный положительный модификатор и самый сильный отрицательный модификатор.

Эффект блокировки загрязнения

BlockContaminationRangeEffect блокирует загрязнение на достижимых клетках, пока эффект активен.

{
  "BlockContaminationRangeEffectSpec": {
    "EffectGroup": "wet"
  }
}

Поля:

  • EffectGroup - имя группы, используемое в ManufactoryIrrigationTowerSpec.Effects.

Как выбрать тип башни

Используйте GoodConsumingIrrigationTower, если:

  • здание непрерывно потребляет один товар;
  • выбор рецепта не нужен;
  • все range effects должны всегда применяться, пока активно орошение.

Используйте ManufactoryIrrigationTower, если:

  • здание должно использовать рецепты;
  • разные рецепты должны давать разные эффекты;
  • здание может потреблять несколько ингредиентов или топливо.

Чеклист реализации

Для собственного здания-оросителя:

  1. Добавьте Timberborn.IgorZ.TimberCommons в зависимости вашего мода.
  2. Добавьте в blueprint здания либо GoodConsumingIrrigationTowerSpec, либо ManufactoryIrrigationTowerSpec.
  3. Добавьте соответствующие стандартные компоненты Timberborn, например GoodConsumingBuilding или Manufactory.
  4. Настройте потребление или рецепты для максимального покрытия.
  5. При необходимости добавьте specs для range effects в тот же blueprint здания.
  6. Проверьте башню на плоской земле, рядом с разрывами рельефа, рядом с барьерами влажности и при сниженной эффективности.

Текущие ограничения

  • GoodConsumingIrrigationTower поддерживает ровно один потребляемый товар.
  • Орошение не проходит через перепады высоты.
  • Орошение не проходит через полные барьеры влажности.
  • Башня орошает только клетки, соединенные со зданием через ортогональных соседей.
  • EffectGroup важен для ManufactoryIrrigationTower; для GoodConsumingIrrigationTower он игнорируется.
⚠️ **GitHub.com Fallback** ⚠️