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);
}
}
}
bi bij bibi