コード例 #1
0
 private void Window(int windowID)
 {
     bold_label           = new GUIStyle(GUI.skin.label);
     bold_label.fontStyle = FontStyle.Bold;
     if (GUI.Button(new Rect(windowPosition.width - 20, 2, 18, 18), "x"))
     {
         render_window = false;
     }
     GUILayout.BeginVertical();
     if (vessel.Splashed)
     {
         if (analysis_count > analysis_length)
         {
             GUILayout.BeginHorizontal();
             GUILayout.Label("Liquid", bold_label, GUILayout.Width(150));
             GUILayout.Label("Abundance", bold_label, GUILayout.Width(150));
             GUILayout.EndHorizontal();
             GUILayout.Space(5);
             foreach (ORSOceanicResource oceanic_resource in ORSOceanicResourceHandler.getOceanicCompositionForBody(vessel.mainBody.flightGlobalsIndex))
             {
                 GUILayout.BeginHorizontal();
                 GUILayout.Label(oceanic_resource.getDisplayName(), GUILayout.Width(150));
                 string resource_abundance_str;
                 if (oceanic_resource.getResourceAbundance() > 0.001)
                 {
                     resource_abundance_str = (oceanic_resource.getResourceAbundance() * 100.0).ToString() + "%";
                 }
                 else
                 {
                     if (oceanic_resource.getResourceAbundance() > 0.000001)
                     {
                         resource_abundance_str = (oceanic_resource.getResourceAbundance() * 1e6).ToString() + " ppm";
                     }
                     else
                     {
                         resource_abundance_str = (oceanic_resource.getResourceAbundance() * 1e9).ToString() + " ppb";
                     }
                 }
                 GUILayout.Label(resource_abundance_str, GUILayout.Width(150));
                 GUILayout.EndHorizontal();
             }
         }
         else
         {
             double percent_analysed = (double)analysis_count / analysis_length * 100;
             GUILayout.BeginHorizontal();
             GUILayout.Label("Analysing...", GUILayout.Width(150));
             GUILayout.Label(percent_analysed.ToString("0.00") + "%", GUILayout.Width(150));
             GUILayout.EndHorizontal();
         }
     }
     else
     {
         GUILayout.Label("--No Ocean to Sample--", GUILayout.ExpandWidth(true));
         analysis_count = 0;
     }
     GUILayout.EndVertical();
     GUI.DragWindow();
 }
コード例 #2
0
 public override void OnUpdate()
 {
     if (HighLogic.LoadedSceneIsFlight)
     {
         double resource_abundance = 0;
         bool   resource_available = false;
         if (vessel.Landed)
         {
             ORSPlanetaryResourcePixel current_resource_abundance_pixel = ORSPlanetaryResourceMapData.getResourceAvailabilityByRealResourceName(vessel.mainBody.flightGlobalsIndex, resourceName, vessel.latitude, vessel.longitude);
             resource_abundance = current_resource_abundance_pixel.getAmount();
         }
         else if (vessel.Splashed)
         {
             resource_abundance = ORSOceanicResourceHandler.getOceanicResourceContent(vessel.mainBody.flightGlobalsIndex, resourceName);
         }
         if (resource_abundance > 0)
         {
             resource_available = true;
         }
         Events["startResourceExtraction"].active = !IsEnabled && resource_available;
         Events["stopResourceExtration"].active   = IsEnabled;
         if (IsEnabled)
         {
             Fields["powerStr"].guiActive     = true;
             Fields["resourceRate"].guiActive = true;
             statusTitle = "Active";
             double power_required = 0;
             if (vessel.Landed)
             {
                 power_required = powerConsumptionLand;
             }
             else if (vessel.Splashed)
             {
                 power_required = powerConsumptionOcean;
             }
             powerStr = (power_required * electrical_power_ratio).ToString("0.000") + " MW / " + power_required.ToString("0.000") + " MW";
             double resource_density       = PartResourceLibrary.Instance.GetDefinition(resourceName).density;
             double resource_rate_per_hour = extraction_rate_d * resource_density * 3600;
             resourceRate = formatMassStr(resource_rate_per_hour);
         }
         else
         {
             Fields["powerStr"].guiActive     = false;
             Fields["resourceRate"].guiActive = false;
             statusTitle = "Offline";
         }
     }
 }
コード例 #3
0
        public override void OnFixedUpdate()
        {
            if (IsEnabled)
            {
                double power_requirements = 0;
                double extraction_time    = 0;
                if (vessel.Landed)
                {
                    power_requirements = powerConsumptionLand;
                    extraction_time    = extractionRateLandPerTon;
                }
                else if (vessel.Splashed)
                {
                    power_requirements = powerConsumptionOcean;
                    extraction_time    = extractionRateOceanPerTon;
                }
                else
                {
                    IsEnabled = false;
                    return;
                }

                /** RAILS **/
                if (Time.timeSinceLevelLoad < 1.0f || !FlightGlobals.ready)
                {
                    return;
                }

                if (lastUpdateTime == 0.0f)
                {
                    // Just started running
                    lastUpdateTime = Planetarium.GetUniversalTime();
                    return;
                }

                double deltaTime = Math.Min(Planetarium.GetUniversalTime() - lastUpdateTime, Utilities.MaxDeltaTime);
                lastUpdateTime += deltaTime;
                /** RAILS **/


                double electrical_power_provided = 0;
                double desiredPower = power_requirements * TimeWarp.fixedDeltaTime;
                double maxPower     = power_requirements * Math.Max(Utilities.ElectricityMaxDeltaTime, TimeWarp.fixedDeltaTime);

                var powerRequested = Math.Min(desiredPower, maxPower);


                if (resourceManaged)
                {
                    electrical_power_provided = consumeFNResource(powerRequested, resourceToUse);
                }
                else
                {
                    electrical_power_provided = part.RequestResource(resourceToUse, powerRequested);
                }
                if (power_requirements > 0)
                {
                    electrical_power_ratio = electrical_power_provided / desiredPower;
                }
                else
                {
                    if (power_requirements < 0)
                    {
                        IsEnabled = false;
                        return;
                    }
                    else
                    {
                        electrical_power_ratio = 1;
                    }
                }
                double resource_abundance = 0;
                if (vessel.Landed)
                {
                    ORSPlanetaryResourcePixel current_resource_abundance_pixel = ORSPlanetaryResourceMapData.getResourceAvailabilityByRealResourceName(vessel.mainBody.flightGlobalsIndex, resourceName, vessel.latitude, vessel.longitude);
                    resource_abundance = current_resource_abundance_pixel.getAmount();
                }
                else if (vessel.Splashed)
                {
                    resource_abundance = ORSOceanicResourceHandler.getOceanicResourceContent(vessel.mainBody.flightGlobalsIndex, resourceName);
                }
                double extraction_rate = resource_abundance * extraction_time * electrical_power_ratio;
                if (resource_abundance > 0)
                {
                    double resource_density = PartResourceLibrary.Instance.GetDefinition(resourceName).density;
                    extraction_rate_d = -ORSHelper.fixedRequestResource(part, resourceName, -extraction_rate / resource_density * deltaTime) / deltaTime;
                }
                else
                {
                    IsEnabled = false;
                }
            }
        }