Custom liquid mixers

You can add global liquid mixing instructions. Mixing instructions are responsible for turning source liquids into target liquids inside liquid containers. For example, mixing Mending serum and Acid to create Osteomorphisis agent.

Simple example

var mixer = new LiquidMixInstructions(
    Liquid.GetLiquid(WaterBreathingSyringe.WaterBreathingSerum.ID), //source liquid A
    Liquid.GetLiquid(Chemistry.Tritium.ID),                         //source liquid B
    Liquid.GetLiquid(Chemistry.ExoticLiquid.ID));                   //target liquid

LiquidMixingController.MixInstructions.Add(mixer);                  //add mixer to global list

Creating instructions

Preferrably done using one of the three constructors:

LiquidMixInstructions(Liquid[] sourceLiquids, Liquid targetLiquid, float ratePerSecond = 0.05f)
LiquidMixInstructions(Liquid sourceA, Liquid sourceB, Liquid targetLiquid, float ratePerSecond = 0.05f)
LiquidMixInstructions(Liquid sourceA, Liquid sourceB, Liquid sourceC, Liquid targetLiquid, float ratePerSecond = 0.05f)

Instructions have other members that you can edit.

var mixer = new LiquidMixInstructions(
    Liquid.GetLiquid(WaterBreathingSyringe.WaterBreathingSerum.ID),
    Liquid.GetLiquid(Chemistry.Tritium.ID),                        
    Liquid.GetLiquid(Chemistry.ExoticLiquid.ID));

// Amount of liquid units that are converted every second
mixer.RatePerSecond = 0.1f;

// The optional container filter function. If this function returns false, the mixing will not take place
mixer.ContainerFilter = container => {
    // this function will only return true if the container is a flask.
    return container is FlaskBehaviour;
};

LiquidMixingController.MixInstructions.Add(mixer); 

Restrictions

All liquids that are involved in a mixing process have to be registered in the Liquid registry. Here's a chapter on how to do that..

They can be registered before or after adding the mixer to the controller, it doesn't matter. Do note that all mixer instructions are cleared on map load. This means that your mixers should be added in your Main method.

Full example

using UnityEngine;

namespace Mod
{
    public class Mod
    {
        public static void Main()
        {
            var bloodOilMixture = new LiquidMixInstructions(
                Liquid.GetLiquid(Blood.ID),
                Liquid.GetLiquid(Oil.ID),                        
                Liquid.GetLiquid(Nitroglycerine.ID));

            // i dont wan't liquids to mix inside a limb
            bloodOilMixture.ContainerFilter = container => !(container is CirculationBehaviour);

            LiquidMixingController.MixInstructions.Add(bloodOilMixture); 
        }
    }
}
Attention!

This member is obsolete and should not be used. It is a remnant from the past.

bi bij bibi