TransferResource() public method

public TransferResource ( string resource, double amount ) : double
resource string
amount double
return double
Example #1
0
        // =====================================================================================================================================================
        // 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);
            }
        }