Click or drag to resize

SubstanceRule

SubstanceRule works with all content collections in a lab. If certain content collection satisfies rule conditions, input substances are replaced with output substances. Additionally an arbitrary action can be invoked right after.

Example
                  <
                  Rules
                  >        
  <SubstanceRule>
    <Conditions>
      <RuleCondition Expression="${Binding Water.Temperature, Converter=GreaterThanOrEquals, ConverterParameter=100}">
    </Conditions>
    <In>
      <SubstanceIn ContentType="Water" />
    </In>
    <Out>
      <SubstanceOut ContentType="WaterGas" AmountExpression="${Binding Water.Amount}" />
    </Out>
    <Action>
      <ShowEvaporationEffect Target="{Binding}" />
    </Action>
  </SubstanceRule>
</Rules>

Such rule will find every Water in the lab and transform it into a WaterGas in case its temperature has reached 100 degrees. For each case evaporation effect will be displayed. All other substances in content collections with newly created WaterGas will stay unaffected.

Example
                  <
                  Rules
                  >
  <SubstanceRule Duration="60">
    <Conditions>
      <RuleCondition ForbiddenImpact="Vortex">
    </Conditions>
    <In>
      <SubstanceIn ContentType="OilWaterSolution" />
    </In>
    <Out>
      <SubstanceOut ContentType="Water" AmountExpression="${Calc Arg1={Binding OilWaterSolution.Amount}, Arg2=2, Operation=Divide}" />
      <SubstanceOut ContentType="Oil" AmountExpression="${Calc Arg1={Binding OilWaterSolution.Amount}, Arg2=2, Operation=Divide}" />            
    </Out>
  </SubstanceRule>
</Rules>

Rule in example above will make sure that every OilWaterSolution in a lab is separated into Oil and Water in equal amounts if no vortex is applied for 60 seconds.

Example
                  <
                  SubstanceRule DurationExpression="${Calc Arg1={Calc Arg1={Binding Sugar.SolubilityFactor}, Arg2={Binding Temperature}, Operation=Divide}, Arg2=10, Operation=Multiply}" InstantImpact="Vortex">
  <In>
    <SubstanceIn ContentType="Sugar" />
    <SubstanceIn ContentType="Water" />
  </In>
  <Out>
    <SubstanceOut ContentType="SugarWaterSolution" AmountExpression="${Calc Arg1={Binding Sugar.Amount}, Arg2={Binding Water.Amount}, Operation=Add}" />
  </Out>
</SubstanceRule>

This rule will form a solution out of Water and Sugar during a time frame that depends on solubility factor of Sugar and a temperature of a content collection. Duration can be different for each content collection, which is why DurationExpression is used. Solution will be created immediately if content collection is vortexed.