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.altitude < PluginHelper.getMaxAtmosphericAltitude(vessel.mainBody)) { if (analysis_count > analysis_length) { GUILayout.BeginHorizontal(); GUILayout.Label("Gas", bold_label, GUILayout.Width(150)); GUILayout.Label("Abundance", bold_label, GUILayout.Width(150)); GUILayout.EndHorizontal(); GUILayout.Space(5); foreach (AtmosphericResource atmospheric_resource in AtmosphericResourceHandler.GetAtmosphericCompositionForBody(vessel.mainBody.flightGlobalsIndex).Values) { GUILayout.BeginHorizontal(); GUILayout.Label(atmospheric_resource.DisplayName, GUILayout.Width(150)); string resource_abundance_str; if (atmospheric_resource.ResourceAbundance > 0.001) { resource_abundance_str = (atmospheric_resource.ResourceAbundance * 100.0).ToString() + "%"; } else { if (atmospheric_resource.ResourceAbundance > 0.000001) { resource_abundance_str = (atmospheric_resource.ResourceAbundance * 1e6).ToString() + " ppm"; } else { resource_abundance_str = (atmospheric_resource.ResourceAbundance * 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 Atmosphere to Sample--", GUILayout.ExpandWidth(true)); analysis_count = 0; } GUILayout.EndVertical(); GUI.DragWindow(); }
public void ToggleResource() { currentresource++; if (AtmosphericResourceHandler.getAtmosphericResourceName(vessel.mainBody.flightGlobalsIndex, currentresource) == null && AtmosphericResourceHandler.getAtmosphericResourceContent(vessel.mainBody.flightGlobalsIndex, currentresource) > 0 && currentresource != 0) { ToggleResource(); } if (currentresource >= AtmosphericResourceHandler.GetAtmosphericCompositionForBody(vessel.mainBody.flightGlobalsIndex).Count) { currentresource = 0; } resflow = String.Empty; resflowf = 0; }
public override void OnUpdate() { Events["ActivateScoop"].active = !scoopIsEnabled; Events["DisableScoop"].active = scoopIsEnabled; Events["ToggleResource"].active = scoopIsEnabled; Fields["resflow"].guiActive = scoopIsEnabled; Fields["currentresourceStr"].guiActive = scoopIsEnabled; Fields["resourceStoragename"].guiActive = scoopIsEnabled; double resourcePercentage = AtmosphericResourceHandler.getAtmosphericResourceContent(vessel.mainBody.flightGlobalsIndex, currentresource) * 100; string resourceDisplayName = AtmosphericResourceHandler.getAtmosphericResourceDisplayName(vessel.mainBody.flightGlobalsIndex, currentresource); if (resourceDisplayName != null) { currentresourceStr = resourceDisplayName + "(" + resourcePercentage + "%)"; } UpdateResourceFlow(); }
private void ScoopAthmosphere(double deltaTimeInSeconds, bool offlineCollecting) { string ors_atmospheric_resource_name = AtmosphericResourceHandler.getAtmosphericResourceName(vessel.mainBody.flightGlobalsIndex, currentresource); string resourceDisplayName = AtmosphericResourceHandler.getAtmosphericResourceDisplayName(vessel.mainBody.flightGlobalsIndex, currentresource); if (ors_atmospheric_resource_name == null) { resflowf = 0; recievedPower = "error"; densityFractionOfUpperAthmosphere = "error"; return; } // map ors resource to kspi resource if (PluginHelper.OrsResourceMappings == null || !PluginHelper.OrsResourceMappings.TryGetValue(ors_atmospheric_resource_name, out resourceStoragename)) { resourceStoragename = ors_atmospheric_resource_name; } else if (!PartResourceLibrary.Instance.resourceDefinitions.Contains(resourceStoragename)) { resourceStoragename = ors_atmospheric_resource_name; } var definition = PartResourceLibrary.Instance.GetDefinition(resourceStoragename); if (definition == null) { return; } double resourcedensity = definition.density; double maxAltitudeAtmosphere = PluginHelper.getMaxAtmosphericAltitude(vessel.mainBody); double upperAtmospherFraction = Math.Max(0, (vessel.altitude - maxAltitudeAtmosphere) / Math.Max(0.000001, maxAltitudeAtmosphere * PluginHelper.MaxAtmosphericAltitudeMult - maxAltitudeAtmosphere)); double upperatmosphereDensity = 1 - upperAtmospherFraction; double airDensity = part.vessel.atmDensity + (PluginHelper.MinAtmosphericAirDensity * upperatmosphereDensity); atmosphericDensity = airDensity.ToString("0.00000000"); var hydrogenTax = 0.4 * Math.Sin(upperAtmospherFraction * Math.PI * 0.5); var heliumTax = 0.2 * Math.Sin(upperAtmospherFraction * Math.PI); double rescourceFraction = (1.0 - hydrogenTax - heliumTax) * AtmosphericResourceHandler.getAtmosphericResourceContent(vessel.mainBody.flightGlobalsIndex, currentresource); // increase density hydrogen if (resourceDisplayName == "Hydrogen") { rescourceFraction += hydrogenTax; } else if (resourceDisplayName == "Helium") { rescourceFraction += heliumTax; } densityFractionOfUpperAthmosphere = (upperatmosphereDensity * 100).ToString("0.000") + "%"; rescourcePercentage = rescourceFraction * 100; if (rescourceFraction <= 0 || vessel.altitude > (PluginHelper.getMaxAtmosphericAltitude(vessel.mainBody) * PluginHelper.MaxAtmosphericAltitudeMult)) { resflowf = 0; recievedPower = "off"; densityFractionOfUpperAthmosphere = "too high"; rescourcePercentage = 0; return; } double airspeed = part.vessel.srf_velocity.magnitude + 40; double air = airspeed * (airDensity / 1000) * scoopair / resourcedensity; double scoopedAtm = air * rescourceFraction; double powerrequirementsMW = (scoopair / 0.15) * 6 * PluginHelper.PowerConsumptionMultiplier * powerReqMult; if (scoopedAtm > 0 && part.GetResourceSpareCapacity(resourceStoragename) > 0) { var powerRequest = powerrequirementsMW * TimeWarp.fixedDeltaTime; // calculate available power double powerreceivedMW = CheatOptions.InfiniteElectricity ? powerRequest : Math.Max(consumeFNResource(powerRequest, ResourceManager.FNRESOURCE_MEGAJOULES, TimeWarp.fixedDeltaTime), 0); double normalisedRevievedPowerMW = powerreceivedMW / TimeWarp.fixedDeltaTime; // if power requirement sufficiently low, retreive power from KW source if (powerrequirementsMW < 2 && normalisedRevievedPowerMW <= powerrequirementsMW) { var requiredKW = (powerrequirementsMW - normalisedRevievedPowerMW) * 1000; var recievedKW = part.RequestResource(ResourceManager.STOCK_RESOURCE_ELECTRICCHARGE, requiredKW * TimeWarp.fixedDeltaTime); powerreceivedMW += (recievedKW / 1000); } last_power_percentage = offlineCollecting ? last_power_percentage : powerreceivedMW / powerrequirementsMW / TimeWarp.fixedDeltaTime; } else { last_power_percentage = 0; powerrequirementsMW = 0; } recievedPower = powerrequirementsMW < 2 ? (last_power_percentage * powerrequirementsMW * 1000).ToString("0.0") + " KW / " + (powerrequirementsMW * 1000).ToString("0.0") + " KW" : (last_power_percentage * powerrequirementsMW).ToString("0.0") + " MW / " + powerrequirementsMW.ToString("0.0") + " MW"; double resourceChange = scoopedAtm * last_power_percentage * deltaTimeInSeconds; if (offlineCollecting) { string numberformat = resourceChange > 100 ? "0" : "0.00"; ScreenMessages.PostScreenMessage("Atmospheric Scoop collected " + resourceChange.ToString(numberformat) + " " + resourceStoragename, 10.0f, ScreenMessageStyle.LOWER_CENTER); } resflowf = part.RequestResource(resourceStoragename, -resourceChange); resflowf = -resflowf / TimeWarp.fixedDeltaTime; UpdateResourceFlow(); }
private void Window(int windowID) { bold_label = new GUIStyle(GUI.skin.label) { fontStyle = FontStyle.Bold }; if (GUI.Button(new Rect(windowPosition.width - 20, 2, 18, 18), "x")) { render_window = false; } GUILayout.BeginVertical(); if (vessel.altitude < PluginHelper.GetMaxAtmosphericAltitude(vessel.mainBody)) { if (analysis_count > analysis_length) { GUILayout.BeginHorizontal(); GUILayout.Label(Localizer.Format("#LOC_KSPIE_FNMassSpectrometer_Gas"), bold_label, GUILayout.Width(150)); //"Gas" GUILayout.Label(Localizer.Format("#LOC_KSPIE_MassSpectrometer_Abundance"), bold_label, GUILayout.Width(150)); //"Abundance" GUILayout.EndHorizontal(); GUILayout.Space(5); foreach (var atmospheric_resource in AtmosphericResourceHandler.GetAtmosphericCompositionForBody(vessel.mainBody).Values) { GUILayout.BeginHorizontal(); GUILayout.Label(atmospheric_resource.DisplayName, GUILayout.Width(150)); string resource_abundance_str; if (atmospheric_resource.ResourceAbundance > 0.001) { resource_abundance_str = (atmospheric_resource.ResourceAbundance * 100.0) + "%"; } else { if (atmospheric_resource.ResourceAbundance > 0.000001) { resource_abundance_str = (atmospheric_resource.ResourceAbundance * 1e6) + " ppm"; } else { resource_abundance_str = (atmospheric_resource.ResourceAbundance * 1e9) + " 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(Localizer.Format("#LOC_KSPIE_MassSpectrometer_Analysing"), GUILayout.Width(150));//"Analysing..." GUILayout.Label(percent_analysed.ToString("0.00") + "%", GUILayout.Width(150)); GUILayout.EndHorizontal(); } } else { GUILayout.Label(Localizer.Format("#LOC_KSPIE_FNLCMassSpectrometer_NoAtomspheretoSample"), GUILayout.ExpandWidth(true));//"--No Atmosphere to Sample--" analysis_count = 0; } GUILayout.EndVertical(); GUI.DragWindow(); }