public void CalculateMass() { if (tankList == null || !massDirty) { return; } massDirty = false; double basemass = basemassConst + basemassPV * volume; if (basemass >= 0) { double tankDryMass = tankList .Where(fuel => fuel.maxAmount > 0 && fuel.utilization > 0) .Sum(fuel => (float)fuel.maxAmount * fuel.mass / fuel.utilization); mass = (float)(basemass + tankDryMass) * MassMult; if (part.mass != mass) { part.mass = mass; MassChanged(mass); // compute massDelta based on prefab, if available. if ((object)(part.partInfo) != null) { if ((object)(part.partInfo.partPrefab) != null) { massDelta = part.mass - part.partInfo.partPrefab.mass; } } } } else { mass = part.mass; // display dry mass even in this case. } if (isEditor) { UsedVolume = tankList .Where(fuel => fuel.maxAmount > 0 && fuel.utilization > 0) .Sum(fuel => fuel.maxAmount / fuel.utilization); SIPrefix pfx = volume.GetSIPrefix(); Func <double, string> formatter = pfx.GetFormatter(volume); volumeDisplay = "Avail: " + formatter(AvailableVolume) + pfx.PrefixString() + MFSSettings.unitLabel + " / Tot: " + formatter(volume) + pfx.PrefixString() + MFSSettings.unitLabel; 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(); } }
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(); } }