// ===================================================================================================================================================== // UI Functions private void UseResources(Vessel craft) { VesselResources craftResources = new VesselResources(craft); // Remove all resources that we might later fill (hull resources will not be touched) HashSet <string> resources_to_remove = new HashSet <string>(uis.requiredresources.Keys); craftResources.RemoveAllResources(resources_to_remove); // remove rocket parts required for the hull and solid fuel padResources.TransferResource("RocketParts", -uis.hullRocketParts); // use resources foreach (KeyValuePair <string, double> pair in uis.requiredresources) { // If resource is "JetFuel", rename to "LiquidFuel" string res = pair.Key; if (pair.Key == "JetFuel") { res = "LiquidFuel"; if (pair.Value == 0) { continue; } } if (!uis.resourcesliders.ContainsKey(pair.Key)) { Debug.Log(String.Format("[EL] missing slider {0}", pair.Key)); continue; } // Calculate resource cost based on slider position - note use pair.Key NOT res! we need to use the position of the dedicated LF slider not the LF component of LFO slider double tot = pair.Value * uis.resourcesliders[pair.Key]; // Transfer the resource from the vessel doing the building to the vessel being built padResources.TransferResource(res, -tot); craftResources.TransferResource(res, tot); } }
internal void SetupCraftResources(Vessel vsl) { craftResources = new VesselResources (vsl); foreach (var br in buildCost.optional) { var amount = craftResources.ResourceAmount (br.name); craftResources.TransferResource (br.name, -amount); } }
public float RecycleVessel(Vessel v) { float ConversionEfficiency = 0.8f; double amount; VesselResources scrap = new VesselResources (v); string target_resource; PartResourceDefinition rp_def; if (ExLaunchPad.kethane_present) { target_resource = "Metal"; } else { target_resource = "RocketParts"; } rp_def = PartResourceLibrary.Instance.GetDefinition (target_resource); if (FlightGlobals.ActiveVessel == v) FlightGlobals.ForceSetActiveVessel (this.vessel); float mass = 0; foreach (var crew in v.GetVesselCrew ()) { mass += RecycleKerbal (crew, null); } foreach (string resource in scrap.resources.Keys) { amount = scrap.ResourceAmount (resource); mass += ReclaimResource (resource, amount, v.name); scrap.TransferResource (resource, -amount); } float hull_mass = v.GetTotalMass (); amount = hull_mass * ConversionEfficiency / rp_def.density; mass += ReclaimResource (target_resource, amount, v.name, "hull"); v.Die (); return mass; }
private float ReclaimResource(string resource, double amount, string vessel_name, string name=null) { PartResourceDefinition res_def; res_def = PartResourceLibrary.Instance.GetDefinition(resource); VesselResources recycler = new VesselResources(vessel); if (res_def == null) { return 0; } if (name == null) { name = resource; } double remain = amount; // any resources that can't be pumped or don't flow just "evaporate" // FIXME: should this be a little smarter and convert certain such // resources into rocket parts? if (res_def.resourceTransferMode != ResourceTransferMode.NONE && res_def.resourceFlowMode != ResourceFlowMode.NO_FLOW) { remain = recycler.TransferResource(resource, amount); } Debug.Log(String.Format("[EL] {0}-{1}: {2} taken {3} reclaimed, {4} lost", vessel_name, name, amount, amount - remain, remain)); return (float) (amount * res_def.density); }
// ===================================================================================================================================================== // UI Functions private void UseResources(Vessel craft) { VesselResources craftResources = new VesselResources(craft); // Remove all resources that we might later fill (hull resources will not be touched) HashSet<string> resources_to_remove = new HashSet<string>(uis.requiredresources.Keys); craftResources.RemoveAllResources(resources_to_remove); // remove rocket parts required for the hull and solid fuel padResources.TransferResource("RocketParts", -uis.hullRocketParts); // use resources foreach (KeyValuePair<string, double> pair in uis.requiredresources) { // If resource is "JetFuel", rename to "LiquidFuel" string res = pair.Key; if (pair.Key == "JetFuel") { res = "LiquidFuel"; if (pair.Value == 0) continue; } if (!uis.resourcesliders.ContainsKey(pair.Key)) { Debug.Log(String.Format("[EL] missing slider {0}", pair.Key)); continue; } // Calculate resource cost based on slider position - note use pair.Key NOT res! we need to use the position of the dedicated LF slider not the LF component of LFO slider double tot = pair.Value * uis.resourcesliders[pair.Key]; // Transfer the resource from the vessel doing the building to the vessel being built padResources.TransferResource(res, -tot); craftResources.TransferResource(res, tot); } }