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)); }
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()); }
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(); } }