Контейнеры растворов
Чтобы сделать сущность контейнером раствора, добавьте ей SolutionContainerManager. Например, вот пустой раствор желудка:
- type: SolutionContainerManager
solutions:
stomach:
maxVol: 200
а вот полный раствор напитка:
- type: SolutionContainerManager
solutions:
drink:
maxVol: 20
reagents:
- ReagentId: Cola
Quantity: 20
type: Тип компонента. Всегда должен быть SolutionContainerManager.
solutions: Словарь из имени раствора и Solution, описанного ниже.
У растворов есть несколько полей, все они необязательны.
maxVol: Максимальный объём раствора, который он может вместить. Как только сумма Quantity реагентов достигает maxVol, больше реагентов добавить нельзя. Он полон.
reagents: Список Reagent, которые он должен содержать по умолчанию. Каждый Reagent имеет строковый ReagentId и Quantity, который является FixedPoint2 (по сути float, ограниченный двумя знаками после запятой).
Возможности и указание целевого раствора
С появлением SolutionContainerManager больше нет простого отображения 1:1 между сущностью и списком реагентов.
Каждый SolutionContainerManager может содержать любое количество растворов. Чтобы решить эту проблему, вместо флага Capabilities введён набор компонентов, похожих на возможности. Каждая такая возможность имеет строковое поле solution, которое сообщает SolutionContainerManager, на какой раствор она нацелена.
Вот их список:
DrainableSolutionComponentдля растворов, которые можно легко извлечь через любой контейнер для реагентов. Например, слив воды из бака с водойDrawableSolutionComponentдля растворов, которые можно набирать шприцами. Например, люди или флаконы для шприцев с резиновыми крышками.ExaminableSolutionComponentдля растворов, которые можно рассмотреть вручную.FitsInDispenserComponentотмечает, что компонент помещается в дозатор, и сообщает ReagentDispenser/ChemMaster, на какой раствор нацелиться.InjectableSolutionComponentдля растворов, в которые можно делать инъекции шприцами.RefillableSolutionComponentдля растворов, которые можно легко пополнить.
Другие компоненты, такие как DrinkComponent или FoodComponent, могут иметь специальные предопределённые растворы, на которые они нацелены и которые ожидают увидеть. Например, DrinkComponent попытается создать раствор drink, если ещё нет легкодоступного DrainableSolutionComponent.
Пример раствора
Вот полный пример сущности с несколькими растворами:
- type: entity
id: DrinkColaCan
name: space cola
description: A refreshing beverage.
components:
- type: Sprite
sprite: Objects/Consumable/Drinks/cola.rsi
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: Cola
Quantity: 20
maxVol: 20
- type: Drink