protected void OnGUI() { string resourcename = FNResourceManager.FNRESOURCE_MEGAJOULES; Vessel vessel = FlightGlobals.ActiveVessel; ORSResourceManager mega_manager = null; if (vessel != null) { if (FNResourceOvermanager.getResourceOvermanagerForResource(resourcename).hasManagerForVessel(vessel) && !hide_button) { mega_manager = FNResourceOvermanager.getResourceOvermanagerForResource(resourcename).getManagerForVessel(vessel); if (mega_manager.getPartModule() != null) { mega_manager.OnGUI(); if (!PluginHelper.using_toolbar) { GUILayout.BeginArea(button_position); if (GUILayout.Button(guibuttontexture)) { mega_manager.showWindow(); } GUILayout.EndArea(); } else { if (show_window) { mega_manager.showWindow(); show_window = false; } } } } } }
public override void OnFixedUpdate() { activeCount++; nuclear_power = 0; solar_power = 0; displayed_solar_power = 0; if (IsEnabled && !relay) { double powerDraw = 0.0; try { ORSResourceManager manager = getOvermanagerForResource(FNResourceManager.FNRESOURCE_MEGAJOULES).getManagerForVessel(vessel); if (manager != null) { powerDraw = manager.PowerDraws.Where(pm => !(pm.Key is MicrowavePowerTransmitter && (pm.Key as MicrowavePowerTransmitter) == this)).Sum(pm => pm.Value); } } catch (ArgumentNullException) { powerDraw = 0.0; } foreach (FNGenerator generator in generators) { if (generator.isActive()) { FNThermalSource thermal_source = generator.getThermalSource(); if (thermal_source != null && !thermal_source.isVolatileSource() && thermal_source.isActive()) { double output = generator.getMaxPowerOutput(); output -= powerDraw / (double)generators.Count(g => g.isActive() && g.getThermalSource().isActive()); output = output * transmitPower / 100.0; double gpower = consumeFNResource(output * TimeWarp.fixedDeltaTime, FNResourceManager.FNRESOURCE_MEGAJOULES); nuclear_power += gpower * 1000 / TimeWarp.fixedDeltaTime; } } } foreach (ModuleDeployableSolarPanel panel in panels) { double output = panel.flowRate; double spower = part.RequestResource("ElectricCharge", output * TimeWarp.fixedDeltaTime); double inv_square_mult = Math.Pow(Vector3d.Distance(FlightGlobals.Bodies[PluginHelper.REF_BODY_KERBIN].transform.position, FlightGlobals.Bodies[PluginHelper.REF_BODY_KERBOL].transform.position), 2) / Math.Pow(Vector3d.Distance(vessel.transform.position, FlightGlobals.Bodies[PluginHelper.REF_BODY_KERBOL].transform.position), 2); displayed_solar_power += spower / TimeWarp.fixedDeltaTime; //scale solar power to what it would be in Kerbin orbit for file storage solar_power += spower / TimeWarp.fixedDeltaTime / inv_square_mult; } } if (double.IsInfinity(nuclear_power) || double.IsNaN(nuclear_power)) { nuclear_power = 0; } if (double.IsInfinity(solar_power) || double.IsNaN(solar_power)) { solar_power = 0; } if (activeCount % 1000 == 9) { ConfigNode config = PluginHelper.getPluginSaveFile(); string vesselID = vessel.id.ToString(); if (config.HasNode("VESSEL_MICROWAVE_POWER_" + vesselID)) { ConfigNode power_node = config.GetNode("VESSEL_MICROWAVE_POWER_" + vesselID); if (power_node.HasValue("nuclear_power")) { power_node.SetValue("nuclear_power", MicrowavePowerTransmitter.getEnumeratedNuclearPowerForVessel(vessel).ToString("E")); } else { power_node.AddValue("nuclear_power", MicrowavePowerTransmitter.getEnumeratedNuclearPowerForVessel(vessel).ToString("E")); } if (power_node.HasValue("solar_power")) { power_node.SetValue("solar_power", MicrowavePowerTransmitter.getEnumeratedSolarPowerForVessel(vessel).ToString("E")); } else { power_node.AddValue("solar_power", MicrowavePowerTransmitter.getEnumeratedSolarPowerForVessel(vessel).ToString("E")); } } else { ConfigNode power_node = config.AddNode("VESSEL_MICROWAVE_POWER_" + vesselID); power_node.AddValue("nuclear_power", MicrowavePowerTransmitter.getEnumeratedNuclearPowerForVessel(vessel).ToString("E")); power_node.AddValue("solar_power", MicrowavePowerTransmitter.getEnumeratedSolarPowerForVessel(vessel).ToString("E")); } if (config.HasNode("VESSEL_MICROWAVE_RELAY_" + vesselID)) { ConfigNode relay_node = config.GetNode("VESSEL_MICROWAVE_RELAY_" + vesselID); if (relay_node.HasValue("relay")) { relay_node.SetValue("relay", MicrowavePowerTransmitter.vesselIsRelay(vessel).ToString()); } else { relay_node.AddValue("relay", MicrowavePowerTransmitter.vesselIsRelay(vessel).ToString()); } } else { ConfigNode relay_node = config.AddNode("VESSEL_MICROWAVE_RELAY_" + vesselID); relay_node.AddValue("relay", MicrowavePowerTransmitter.vesselIsRelay(vessel).ToString()); } config.Save(PluginHelper.getPluginSaveFilePath()); } activeCount++; }