コード例 #1
0
        public double consumeFNResourcePerSecond(double power_requested_per_second, String resourcename, ResourceManager manager = null)
        {
            if (power_requested_per_second.IsInfinityOrNaN())
            {
                Debug.Log("[KSPI]: consumeFNResourcePerSecond was called with illegal value");
                return(0);
            }

            if (manager == null)
            {
                manager = getManagerForVessel(resourcename);
            }
            if (manager == null)
            {
                return(0);
            }

            double availablePower;

            if (!fnresource_supplied.TryGetValue(resourcename, out availablePower))
            {
                fnresource_supplied[resourcename] = 0;
            }

            power_requested_per_second = Math.Max(power_requested_per_second, 0);

            double power_taken_per_second = Math.Max(Math.Min(power_requested_per_second, availablePower), 0);

            fnresource_supplied[resourcename] -= power_taken_per_second;

            manager.powerDrawPerSecond(this, power_requested_per_second, power_taken_per_second);

            return(power_taken_per_second);
        }
コード例 #2
0
        public double consumeFNResourcePerSecond(double power_per_second, String resourcename, ResourceManager manager = null)
        {
            if (double.IsNaN(power_per_second) || String.IsNullOrEmpty(resourcename))
            {
                Debug.Log("[KSPI] - consumeFNResourcePerSecond illegal values.");
                return(0);
            }

            power_per_second = Math.Max(power_per_second, 0);

            if (manager == null)
            {
                manager = getManagerForVessel(resourcename);
            }
            if (manager == null)
            {
                return(0);
            }

            if (!fnresource_supplied.ContainsKey(resourcename))
            {
                fnresource_supplied.Add(resourcename, 0);
            }

            double power_taken_per_second = Math.Max(Math.Min(power_per_second, fnresource_supplied[resourcename]), 0);

            fnresource_supplied[resourcename] -= power_taken_per_second;

            manager.powerDrawPerSecond(this, power_per_second, power_taken_per_second);

            return(power_taken_per_second);
        }
        public double consumeRemainingResourcePerSecond(double power_requested_per_second, String resourcename, ResourceManager manager = null)
        {
            if (manager == null)
            {
                manager = getManagerForVessel(resourcename);
            }
            if (manager == null)
            {
                return(0);
            }
            if (!fnresource_supplied.ContainsKey(resourcename))
            {
                fnresource_supplied.Add(resourcename, 0);
            }

            power_requested_per_second = Math.Max(power_requested_per_second, 0);

            double power_taken_per_second = Math.Max(Math.Min(power_requested_per_second, fnresource_supplied[resourcename]), 0);

            fnresource_supplied[resourcename] -= power_taken_per_second;

            manager.powerDrawPerSecond(this, power_taken_per_second, power_taken_per_second);

            return(power_taken_per_second);
        }
        public double consumeFNResourcePerSecond(double power_requested_per_second, String resourcename, ResourceManager manager = null)
        {
            if (double.IsNaN(power_requested_per_second) || double.IsInfinity(power_requested_per_second))
            {
                Debug.Log("[KSPI]: consumeFNResourcePerSecond was called with illegal power_requested_per_second");
                return(0);
            }

            if (manager == null)
            {
                manager = getManagerForVessel(resourcename);
            }
            if (manager == null)
            {
                return(0);
            }
            if (!fnresource_supplied.ContainsKey(resourcename))
            {
                fnresource_supplied.Add(resourcename, 0);
            }

            power_requested_per_second = Math.Max(power_requested_per_second, 0);

            double power_taken_per_second = Math.Max(Math.Min(power_requested_per_second, fnresource_supplied[resourcename]), 0);

            fnresource_supplied[resourcename] -= power_taken_per_second;

            manager.powerDrawPerSecond(this, power_requested_per_second, power_taken_per_second);

            return(power_taken_per_second);
        }
コード例 #5
0
        public double consumeFNResourcePerSecondBuffered(double requestedPowerPerSecond, String resourcename, double limitBarRatio = 0.1, ResourceManager manager = null)
        {
            if (requestedPowerPerSecond.IsInfinityOrNaN() || String.IsNullOrEmpty(resourcename))
            {
                Debug.Log("[KSPI]: consumeFNResourcePerSecondBuffered was called with illegal value");
                return(0);
            }

            requestedPowerPerSecond = Math.Max(requestedPowerPerSecond, 0);

            if (manager == null)
            {
                manager = getManagerForVessel(resourcename);
            }
            if (manager == null)
            {
                return(0);
            }

            double availablePower;

            if (!fnresource_supplied.TryGetValue(resourcename, out availablePower))
            {
                fnresource_supplied[resourcename] = 0;
            }

            var power_taken_per_second = Math.Max(Math.Min(requestedPowerPerSecond, availablePower), 0);

            fnresource_supplied[resourcename] -= power_taken_per_second;

            // supplement with buffer power if needed and available
            var powerShortage = requestedPowerPerSecond - availablePower;

            if (powerShortage > 0)
            {
                var currentCapacity    = manager.getTotalResourceCapacity();
                var currentAmount      = currentCapacity * manager.ResourceBarRatioBegin;
                var fixedPowerShortage = powerShortage * timeWarpFixedDeltaTime;

                if (currentAmount - fixedPowerShortage > currentCapacity * limitBarRatio)
                {
                    power_taken_per_second += (part.RequestResource(resourcename, fixedPowerShortage) / timeWarpFixedDeltaTime);
                }
            }

            manager.powerDrawPerSecond(this, requestedPowerPerSecond, power_taken_per_second);

            return(power_taken_per_second);
        }