Beispiel #1
0
 public static string ToStringSI(this double value, int sigFigs = 3, string unit = null)
 {
     if (unit == null)
     {
         unit = "";
     }
     return(KSPUtil.PrintSI(value, unit, sigFigs, false));
 }
 public static string FormatMass(float mass)
 {
     if (mass < 1.0f)
     {
         return(KSPUtil.PrintSI(mass * 1e6, "g", 4));
     }
     return(KSPUtil.PrintSI(mass, "t", 4));
 }
        public static string FormatFlux(double flux, bool scale = false)
        {
            string unit = "W";

            if (scale)
            {
                flux *= TimeWarp.fixedDeltaTime;
                unit  = "J";
            }
            return(KSPUtil.PrintSI(flux * 1e3, unit, 4));
        }
Beispiel #4
0
 void EnsureFreshAddLabelCache()
 {
     if (tank_module.AvailableVolume != oldAvailableVolume || tank_module.type != oldTankType)
     {
         foreach (FuelTank tank in tank_module.tankList)
         {
             double maxVol    = tank_module.AvailableVolume * tank.utilization;
             string maxVolStr = KSPUtil.PrintSI(maxVol, "L");
             string label     = "Max: " + maxVolStr + " (+" + ModuleFuelTanks.FormatMass((float)(tank_module.AvailableVolume * tank.mass)) + " )";
             addLabelCache[tank.name] = label;
         }
         oldAvailableVolume = tank_module.AvailableVolume;
         oldTankType        = tank_module.type;
     }
 }
        void AddTank(FuelTank tank)
        {
            double maxVol    = tank_module.AvailableVolume * tank.utilization;
            string maxVolStr = KSPUtil.PrintSI(maxVol, "L");
            string extraData = "Max: " + maxVolStr + " (+" + ModuleFuelTanks.FormatMass((float)(tank_module.AvailableVolume * tank.mass)) + " )";

            GUILayout.Label(extraData, GUILayout.Width(150));

            if (GUILayout.Button("Add", GUILayout.Width(120)))
            {
                tank.maxAmount = tank_module.AvailableVolume * tank.utilization;
                tank.amount    = tank.fillable ? tank.maxAmount : 0;

                tank.maxAmountExpression = tank.maxAmount.ToString();
                //Debug.LogWarning ("[MFT] Adding tank " + tank.name + " maxAmount: " + tank.maxAmountExpression ?? "null");
            }
        }
        public override string GetInfo()
        {
            if (!compatible)
            {
                return("");
            }

            UpdateTankType();

            StringBuilder info = new StringBuilder();

            info.AppendLine("Modular Fuel Tank:");
            info.Append("	Max Volume: ").AppendLine(KSPUtil.PrintSI(volume, MFSSettings.unitLabel));
            info.AppendLine("	Tank can hold:");
            for (int i = 0; i < tankList.Count; i++)
            {
                FuelTank tank = tankList[i];
                info.Append("		").Append(tank).Append(" ").AppendLine(tank.note);
            }
            return(info.ToString());
        }
Beispiel #7
0
        public HasAntenna(double minAntennaPower = 0.0, double maxAntennaPower = double.MaxValue, AntennaType antennaType = AntennaType.TRANSMIT, string title = null)
            : base(title)
        {
            this.minAntennaPower = minAntennaPower;
            this.maxAntennaPower = maxAntennaPower;
            this.antennaType     = antennaType;

            if (title == null)
            {
                if (antennaType == AntennaType.TRANSMIT)
                {
                    this.title = "Transmit antenna rating (combined): ";
                }
                else
                {
                    this.title = "Relay antenna rating (combined): ";
                }

                if (maxAntennaPower == double.MaxValue)
                {
                    this.title += "At least " + KSPUtil.PrintSI(minAntennaPower, "");
                }
                else if (minAntennaPower == 0.0)
                {
                    this.title += "At most " + KSPUtil.PrintSI(maxAntennaPower, "");
                }
                else
                {
                    this.title += "Between " + KSPUtil.PrintSI(minAntennaPower, "") + " and " + KSPUtil.PrintSI(maxAntennaPower, "");
                }
            }
            else
            {
                this.title = title;
            }
        }
        public HasAntenna(double minAntennaPower = 0.0, double maxAntennaPower = double.MaxValue, AntennaType antennaType = AntennaType.TRANSMIT, string title = null)
            : base(title)
        {
            this.minAntennaPower = minAntennaPower;
            this.maxAntennaPower = maxAntennaPower;
            this.antennaType     = antennaType;

            if (title == null)
            {
                string countStr;
                if (maxAntennaPower == double.MaxValue)
                {
                    countStr = Localizer.Format("#cc.param.count.atLeast.num", KSPUtil.PrintSI(minAntennaPower, ""));
                }
                else if (minAntennaPower == 0.0)
                {
                    countStr = Localizer.Format("#cc.param.count.atMost.num", KSPUtil.PrintSI(maxAntennaPower, ""));
                }
                else
                {
                    countStr = Localizer.Format("#cc.param.count.between.num", KSPUtil.PrintSI(minAntennaPower, ""), KSPUtil.PrintSI(maxAntennaPower, ""));
                }

                this.title = Localizer.Format(antennaType == AntennaType.TRANSMIT ? "#cc.param.HasAntenna.transmit" : "#cc.param.HasAntenna.relay", countStr);
            }
            else
            {
                this.title = title;
            }
        }
        public void CalculateMass()
        {
            if (tankList == null || !massDirty)
            {
                return;
            }
            massDirty = false;

            double basemass = basemassConst + basemassPV * (MFSSettings.basemassUseTotalVolume ? totalVolume : volume);

            if (basemass >= 0)
            {
                double tankDryMass = 0;
                for (int i = 0; i < tankList.Count; i++)
                {
                    var tank = tankList[i];
                    tankDryMass += tank.maxAmount * tank.mass / tank.utilization;
                }
                mass = (float)((basemass + tankDryMass) * MassMult);

                // compute massDelta based on prefab, if available.
                if (part.partInfo == null ||
                    part.partInfo.partPrefab == null)
                {
                    part.mass = mass;
                    massDelta = 0;
                }
                else
                {
                    massDelta = mass - part.partInfo.partPrefab.mass;
                }
            }
            else
            {
                mass      = part.mass;            // display dry mass even in this case.
                massDelta = 0f;
            }

            if (isEditor)
            {
                UsedVolume = tankList
                             .Where(fuel => fuel.maxAmount > 0 && fuel.utilization > 0)
                             .Sum(fuel => fuel.maxAmount / fuel.utilization);

                double availRounded = AvailableVolume;
                if (Math.Abs(availRounded) < 0.001d)
                {
                    availRounded = 0d;
                }
                string availVolStr = KSPUtil.PrintSI(availRounded, MFSSettings.unitLabel);
                string volStr      = KSPUtil.PrintSI(volume, MFSSettings.unitLabel);
                volumeDisplay = "Avail: " + availVolStr + " / Tot: " + volStr;

                double resourceMass = part.Resources.Cast <PartResource> ().Sum(r => r.maxAmount * r.info.density);

                double wetMass = mass + resourceMass;
                massDisplay = "Dry: " + FormatMass(mass) + " / Wet: " + FormatMass((float)wetMass);

                UpdateTweakableMenu();
            }
        }