-
Notifications
You must be signed in to change notification settings - Fork 5
TimberCommons
TimberCommons предоставляет переиспользуемые компоненты ирригационных башен для блюпринтов зданий. Мод может использовать эти компоненты, чтобы создавать собственные здания, которые орошают ближайшую местность и при желании применяют эффекты к растениям или загрязнению в активной зоне.
Большинству авторов блюпринтов нужны только следующие разделы. Низкоуровневые точки расширения для C# описаны в конце страницы.
Есть два готовых компонента башен:
-
GoodConsumingIrrigationTowerдля простой башни, работающей на одном потребляемом товаре, обычно воде. -
ManufactoryIrrigationTowerдля башни на основе рецептов, которая потребляет ингредиенты через стандартную логику manufactory.
Оба типа башен орошают клетки вокруг здания, пока здание активно. Настроенное потребление или длительность рецепта должны описывать полное покрытие; TimberCommons масштабирует фактическое потребление по реально покрытой площади.
Обе спецификации башен используют эти поля:
-
IrrigationRange- максимальная дальность орошения от фундамента здания. -
IrrigateFromGroundTilesOnly- необязательное поле, по умолчаниюtrue. Если включено, башня начинает поиск зоны только от блоков фундамента, помеченных как ground-only.
Полезные детали зоны для авторов блюпринтов:
- Дальность считается от фундамента здания, а не от одной центральной клетки.
- Затрагиваемые клетки должны быть связаны с башней и находиться на уровне земли башни.
- Препятствия местности и full-moisture barriers могут блокировать зону.
- Эффективность здания может уменьшать активную дальность.
Используйте GoodConsumingIrrigationTower, когда здание должно потреблять ровно один товар.
Обязательные компоненты:
GoodConsumingBuilding-
GoodConsumingBuildingSpecс ровно однимConsumedGoodSpec GoodConsumingIrrigationTowerSpec
Поля GoodConsumingIrrigationTowerSpec:
IrrigationRangeIrrigateFromGroundTilesOnly
Башня потребляет товары только пока у нее есть достижимые клетки. Если на здании также есть компоненты range-effect, все они активны, когда башня орошает.
Полный JSON-документ в форме blueprint можно посмотреть здесь:
ExampleIrrigationTower.Folktails.blueprint.json.
Полный пример рассчитан на Timberborn 1.1 и подходит для TimberCommons 1.16.0 и 1.16.1 (TBD). Замените template name, ключи локализации, icon, путь к модели, стоимость, tool group и числовые значения на свои, а затем проверьте blueprint в целевой версии игры.
Специфичная для TimberCommons часть маленькая:
{
"GoodConsumingBuildingSpec": {
"FullInventoryWorkHours": 24,
"ConsumedGoods": [
{
"GoodId": "Water",
"GoodPerHour": 1.0
}
]
},
"GoodConsumingIrrigationTowerSpec": {
"IrrigationRange": 8,
"IrrigateFromGroundTilesOnly": true
}
}-
GoodConsumingBuildingSpecговорит игре, какой товар потребляет здание. -
GoodConsumingIrrigationTowerSpecпревращает здание в ирригационную башню и задает ее дальность.
Остальная часть полного blueprint - обычная структура здания Timberborn: размещение, форма блоков, подпись, driveway, точка доступа, визуальная модель и коллайдеры.
Для Timberborn 1.1 DrivewayModelsSpec является root spec для моделей driveway, а отдельные записи driveway помещаются
в массив Driveways. Не используйте DrivewayModelSpec как root spec в блюпринтах Timberborn 1.1.
Для Timberborn 1.0 проверяйте эту же идею по игровым ассетам Timberborn 1.0 перед публикацией. Root specs блюпринтов могут отличаться между версиями игры, и ключ, допустимый в одной версии, может падать в другой.
Используйте ManufactoryIrrigationTower, когда здание должно потреблять разные наборы ингредиентов через рецепты.
Обязательные компоненты:
ManufactoryManufactorySpecManufactoryIrrigationTowerSpec
Не настраивайте другой production executor, например workplace или production increaser. Башня сама управляет производством manufactory.
Поля ManufactoryIrrigationTowerSpec:
IrrigationRangeIrrigateFromGroundTilesOnly-
Effects- необязательные сопоставления рецептов и групп эффектов в формате<recipe id>=<effect group>.
Пример:
Water=NormalIrrigation
Fertilizer=GrowthBoost
Башня орошает, пока manufactory не заблокирована и готова производить. Если настроены Effects, активны только
range effects, соответствующие группе эффекта текущего рецепта.
Range effects - это необязательные компоненты, которые можно добавить на prefab ирригационной башни.
ModifyGrowableGrowthRangeEffect
изменяет скорость роста растений в активной зоне.
Поля ModifyGrowableGrowthRangeEffectSpec:
-
EffectGroup- имя группы, используемоеManufactoryIrrigationTower.GoodConsumingIrrigationTowerего игнорирует. -
GrowthRateModifier- относительный модификатор в процентах. Например,15.5означает +15.5%, а-8.5означает -8.5%. -
ComponentsFilter- необязательные полные имена типов компонентов. Если список задан, растение подходит, когда у него есть любой из перечисленных компонентов. -
TemplateNamesFilter- необязательные точные имена template изTemplateSpec.TemplateNameрастения.
PrefabNamesFilter устарел в TimberCommons 1.16.1 (TBD). Он пока остается только для временной совместимости со
старыми блюпринтами, но в новых спеках его использовать не следует.
Когда несколько эффектов роста пересекаются, модификаторы не складываются простой суммой. Итоговый результат использует лучший положительный booster и худший отрицательный moderator.
BlockContaminationRangeEffect
блокирует загрязнение в активной зоне.
Поля BlockContaminationRangeEffectSpec:
-
EffectGroup- имя группы, используемоеManufactoryIrrigationTower.GoodConsumingIrrigationTowerего игнорирует.
Пересекающиеся зоны блокировки загрязнения отслеживаются независимо, поэтому удаление одного эффекта не снимает защиту, которую дает другой активный эффект.
Для нового блюпринта башни:
- Выберите
GoodConsumingIrrigationTowerдля одного потребляемого товара илиManufactoryIrrigationTowerдля рецептов. - Добавьте соответствующий компонент здания Timberborn и его спецификацию.
- Задайте
IrrigationRange. - Настройте потребление или рецепты для полного покрытия.
- Добавьте встроенные range effects, если башня должна делать что-то кроме орошения.
- Для башен на основе рецептов сопоставьте id рецептов с группами эффектов через
Effects.
Моды, которым нужно собственное поведение в зоне действия, могут реализовать
IRangeEffect.
public interface IRangeEffect {
public string EffectGroup { get; }
public void ApplyEffect(HashSet<Vector3Int> tiles);
public void ResetEffect();
}ApplyEffect получает текущие достижимые клетки. ResetEffect должен отменить все, что сделал последний вызов
ApplyEffect. Компоненты башни могут вызывать эти методы повторно при изменении покрытия, рецепта, местности,
барьеров или состояния здания.
Для более глубокой интеграции наследуйтесь от IrrigationTower только если готовые компоненты башен не подходят к
модели здания.
