private float CalculateVesselPrice(bool withCargo) { double price = 0.0f; string[] propellantResources = new string[0]; if (trackReturnResources == "") { //RmmUtil.DetermineProppellantArray(vessel, ref propellantResources); } else { RmmUtil.GetProppellantArray(trackReturnResources, ref propellantResources); } //cost parts foreach (Part p in vessel.parts) { double missingResCost = 0; foreach (PartResource r in p.Resources) { if (withCargo || propellantResources.Contains(r.info.name)) { missingResCost = missingResCost + RmmUtil.Cost(r.info.name, (r.maxAmount - r.amount)); } else { missingResCost = missingResCost + RmmUtil.Cost(r.info.name, r.maxAmount); } } price = price + (p.partInfo.cost - missingResCost + part.GetModuleCosts(0)); } return((float)price); }