BDB.ModuleBdbBoiloff.Update C# (CSharp) Method

Update() public method

public Update ( ) : void
return void
        public void Update()
        {
            if (HighLogic.LoadedSceneIsFlight && hasCryoResource && boiloffEnabled)
            {
                double currentTime = Planetarium.GetUniversalTime();
                if (lastUpdateTime < 0)
                {
                    lastUpdateTime = currentTime;
                }
                double deltaTime = currentTime - lastUpdateTime;
                if (deltaTime > 0)
                {
                    string s = "";
                    foreach (CryoResourceItem item in cryoResources)
                    {
                        double halfLife = item.boiloffRate / boiloffMultiplier * 60 * 60;
                        if (part.ShieldedFromAirstream)
                        {
                            halfLife *= 10; // We'll pretend shielding acts as insulation.
                        }
                        double resourceAmount = part.Resources[item.name].amount;
                        if (halfLife > 0 && resourceAmount > 0)
                        {
                            double amt0 = resourceAmount;
                            double amtT = amt0 * Math.Pow(0.5, deltaTime / halfLife);
                            double deltaAmount = amt0 - amtT;

                            double resourceConsumed = Math.Max(item.lastAmount - resourceAmount, 0); // Amount being drawn from tank, i.e. engine running.
                            deltaAmount = Math.Max(deltaAmount - resourceConsumed, 0);

                            if (deltaAmount > 0)
                            {
                                part.RequestResource(item.name, deltaAmount, ResourceFlowMode.NO_FLOW);
                            }
                            if (s != "")
                            {
                                s += ", ";
                            }
                            s += item.name + " " + (deltaAmount * (1 / deltaTime) * 60 * 60).ToString("0.0") + "/hr";
                        }
                        item.lastAmount = part.Resources[item.name].amount;
                    }
                    boiloffDisplay = s;
                    lastUpdateTime = currentTime;
                }
            }
            else
            {
                boiloffDisplay = "Disabled";
                lastUpdateTime = -1;
            }
        }