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(); }
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"; } } }
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; } } }