Ejemplo n.º 1
0
        public override void OnFixedUpdateResourceSuppliable(double fixedDeltaTime)
        {
            if (_solarPanel == null)
            {
                return;
            }

            if (_fieldKerbalismNominalRate != null)
            {
                kerbalism_nominalRate = _fieldKerbalismNominalRate.GetValue <double>(_solarPanelFixer);
                kerbalism_panelState  = _fieldKerbalismPanelStatus.GetValue <string>(_solarPanelFixer);

                var kerbalismPanelStateArray = kerbalism_panelState.Split(' ');

                kerbalism_panelOutput = kerbalismPanelStateArray[0];

                double.TryParse(kerbalism_panelOutput, out kerbalism_panelPower);
            }

            if (_outputResource != null && _solarPanel.deployState == ModuleDeployablePart.DeployState.EXTENDED)
            {
                outputResourceRate           = _outputResource.rate;
                outputResourceCurrentRequest = _outputResource.currentRequest;
            }
            else
            {
                outputResourceRate           = 0;
                outputResourceCurrentRequest = 0;
            }

            if (_outputType == ResourceType.other)
            {
                return;
            }

            chargeRate = _solarPanel.chargeRate;

            double age = (Planetarium.GetUniversalTime() - _solarPanel.launchUT) * 1.15740740740741E-05;

            calculatedEfficency = _solarPanel._efficMult > 0 ? _solarPanel._efficMult :
                                  _solarPanel.temperatureEfficCurve.Evaluate((float)part.skinTemperature) *
                                  _solarPanel.timeEfficCurve.Evaluate((float)age) * _solarPanel.efficiencyMult;

            double maxSupply = 0.0, solarRate = 0.0;

            sunAOA = 0;
            CalculateSolarFlowRate(calculatedEfficency / scale, ref maxSupply, ref solarRate);

            _resourceBuffers?.UpdateBuffers();

            if (_outputResource != null)
            {
                if (Kerbalism.IsLoaded)
                {
                    //if (kerbalism_panelPower > 0)
                    //    part.RequestResource(_solarPanel.resourceName, kerbalism_panelPower * fixedDeltaTime);
                }
                else if (_outputResource != null)
                {
                    _outputResource.rate = 0;
                }
                else
                {
                    part.RequestResource(_solarPanel.resourceName, solarRate * fixedDeltaTime);
                }
            }

            // provide power to supply manager
            solar_supply   = _outputType == ResourceType.megajoule ? solarRate : solarRate / GameConstants.ecPerMJ;
            solarMaxSupply = _outputType == ResourceType.megajoule ? maxSupply : maxSupply / GameConstants.ecPerMJ;

            if (!Kerbalism.IsLoaded)
            {
                mjSolarSupply = PluginHelper.GetFormattedPowerString(SupplyFnResourcePerSecondWithMax(solar_supply, solarMaxSupply, ResourceSettings.Config.ElectricPowerInMegawatt));
                mjMaxSupply   = PluginHelper.GetFormattedPowerString(solarMaxSupply);
            }
        }