//Since our input/output ports are inert, we must define the behavior of the ports ourself. //float dt is the amount of time that has passed. typically not used as far as i am aware, likely always just 1 (1 second) private void OnConduitTick(float dt) { //The ConduitFlow task is an overarching flow manager for a specific conduit type. If our bridge is a liquid bridge, we will get the liquid manager. ConduitFlow flowManager = Conduit.GetFlowManager(conduitType); //If there is a pipe connected to the location of the input port, and a pipe connected to the location of the output port if (flowManager.HasConduit(inputPort.GetPortCell()) && flowManager.HasConduit(outputPort.GetPortCell())) { //Get the contents of the input pipe ConduitFlow.ConduitContents contents = flowManager.GetContents(inputPort.GetPortCell()); if (contents.mass > 0f) { //The AddElement method will attempt to move as much fluid from the input to the output as it can, and will return the amount successfully moved (if any). //This method also handles things such as merging disease amounts and temperature based on how much is moved float amountMOved = flowManager.AddElement(outputPort.GetPortCell(), contents.element, contents.mass, contents.temperature, contents.diseaseIdx, contents.diseaseCount); if (amountMOved > 0f) { //RemoveElement, similar to AddElement, automatically reduces the disease count (if any germs are present) flowManager.RemoveElement(inputPort.GetPortCell(), amountMOved); } } } }