public void Update() { this.enabled = true; AvailablePart intakePart = PartLoader.getPartInfoByName("CircularIntake"); if (intakePart != null) { if (intakePart.partPrefab.FindModulesImplementing <AtmosphericIntake>().Count <= 0 && PartLoader.Instance.IsReady()) { plugin_init = false; } } if (!resources_configured) { ConfigNode plugin_settings = GameDatabase.Instance.GetConfigNode("WarpPlugin/WarpPluginSettings/WarpPluginSettings"); if (plugin_settings != null) { if (plugin_settings.HasValue("HydrogenResourceName")) { PluginHelper.hydrogen_resource_name = plugin_settings.GetValue("HydrogenResourceName"); Debug.Log("[KSP Interstellar] Hydrogen resource name set to " + PluginHelper.hydrogen_resource_name); } if (plugin_settings.HasValue("OxygenResourceName")) { PluginHelper.oxygen_resource_name = plugin_settings.GetValue("OxygenResourceName"); Debug.Log("[KSP Interstellar] Oxygen resource name set to " + PluginHelper.oxygen_resource_name); } if (plugin_settings.HasValue("AluminiumResourceName")) { PluginHelper.aluminium_resource_name = plugin_settings.GetValue("AluminiumResourceName"); Debug.Log("[KSP Interstellar] Aluminium resource name set to " + PluginHelper.aluminium_resource_name); } if (plugin_settings.HasValue("MethaneResourceName")) { PluginHelper.methane_resource_name = plugin_settings.GetValue("MethaneResourceName"); Debug.Log("[KSP Interstellar] Methane resource name set to " + PluginHelper.methane_resource_name); } if (plugin_settings.HasValue("ArgonResourceName")) { PluginHelper.argon_resource_name = plugin_settings.GetValue("ArgonResourceName"); Debug.Log("[KSP Interstellar] Argon resource name set to " + PluginHelper.argon_resource_name); } if (plugin_settings.HasValue("WaterResourceName")) { PluginHelper.water_resource_name = plugin_settings.GetValue("WaterResourceName"); Debug.Log("[KSP Interstellar] Water resource name set to " + PluginHelper.water_resource_name); } if (plugin_settings.HasValue("HydrogenPeroxideResourceName")) { PluginHelper.hydrogen_peroxide_resource_name = plugin_settings.GetValue("HydrogenPeroxideResourceName"); Debug.Log("[KSP Interstellar] Hydrogen Peroxide resource name set to " + PluginHelper.hydrogen_peroxide_resource_name); } if (plugin_settings.HasValue("AmmoniaResourceName")) { PluginHelper.ammonia_resource_name = plugin_settings.GetValue("AmmoniaResourceName"); Debug.Log("[KSP Interstellar] Ammonia resource name set to " + PluginHelper.ammonia_resource_name); } if (plugin_settings.HasValue("ThermalMechanicsDisabled")) { PluginHelper.is_thermal_dissip_disabled = bool.Parse(plugin_settings.GetValue("ThermalMechanicsDisabled")); Debug.Log("[KSP Interstellar] ThermalMechanics set to enabled: " + !PluginHelper.is_thermal_dissip_disabled); } resources_configured = true; } else { showInstallationErrorMessage(); } } if (!plugin_init) { gdb = GameDatabase.Instance; plugin_init = true; AvailablePart kerbalRadiationPart = PartLoader.getPartInfoByName("kerbalEVA"); if (kerbalRadiationPart.partPrefab.Modules != null) { if (kerbalRadiationPart.partPrefab.FindModulesImplementing <FNModuleRadiation>().Count == 0) { kerbalRadiationPart.partPrefab.gameObject.AddComponent <FNModuleRadiation>(); } } else { kerbalRadiationPart.partPrefab.gameObject.AddComponent <FNModuleRadiation>(); } List <AvailablePart> available_parts = PartLoader.LoadedPartsList; foreach (AvailablePart available_part in available_parts) { Part prefab_available_part = available_part.partPrefab; try { if (prefab_available_part.Modules != null) { if (prefab_available_part.FindModulesImplementing <ModuleResourceIntake>().Count > 0) { ModuleResourceIntake intake = prefab_available_part.Modules["ModuleResourceIntake"] as ModuleResourceIntake; if (intake.resourceName == "IntakeAir") { Type type = AssemblyLoader.GetClassByName(typeof(PartModule), "AtmosphericIntake"); AtmosphericIntake pm = null; if (type != null) { pm = prefab_available_part.gameObject.AddComponent(type) as AtmosphericIntake; prefab_available_part.Modules.Add(pm); pm.area = intake.area * intake.unitScalar * intake.maxIntakeSpeed / 20; } PartResource intake_air_resource = prefab_available_part.Resources["IntakeAir"]; if (intake_air_resource != null && !prefab_available_part.Resources.Contains("IntakeAtm")) { ConfigNode node = new ConfigNode("RESOURCE"); node.AddValue("name", "IntakeAtm"); node.AddValue("maxAmount", intake_air_resource.maxAmount); node.AddValue("amount", intake_air_resource.amount); prefab_available_part.AddResource(node); } } } if (prefab_available_part.FindModulesImplementing <ModuleDeployableSolarPanel>().Count > 0) { ModuleDeployableSolarPanel panel = prefab_available_part.Modules["ModuleDeployableSolarPanel"] as ModuleDeployableSolarPanel; if (panel.chargeRate > 0) { Type type = AssemblyLoader.GetClassByName(typeof(PartModule), "FNSolarPanelWasteHeatModule"); FNSolarPanelWasteHeatModule pm = null; if (type != null) { pm = prefab_available_part.gameObject.AddComponent(type) as FNSolarPanelWasteHeatModule; prefab_available_part.Modules.Add(pm); } } if (!prefab_available_part.Resources.Contains("WasteHeat") && panel.chargeRate > 0) { ConfigNode node = new ConfigNode("RESOURCE"); node.AddValue("name", "WasteHeat"); node.AddValue("maxAmount", panel.chargeRate * 100); node.AddValue("amount", 0); PartResource pr = prefab_available_part.AddResource(node); if (available_part.resourceInfo != null && pr != null) { if (available_part.resourceInfo.Length == 0) { available_part.resourceInfo = pr.resourceName + ":" + pr.amount + " / " + pr.maxAmount; } else { available_part.resourceInfo = available_part.resourceInfo + "\n" + pr.resourceName + ":" + pr.amount + " / " + pr.maxAmount; } } } } if (prefab_available_part.FindModulesImplementing <ElectricEngineController>().Count() > 0) { available_part.moduleInfo = prefab_available_part.FindModulesImplementing <ElectricEngineController>().First().GetInfo(); available_part.moduleInfos.RemoveAll(modi => modi.moduleName == "Engine"); AvailablePart.ModuleInfo mod_info = available_part.moduleInfos.Where(modi => modi.moduleName == "Electric Engine Controller").First(); mod_info.moduleName = "Electric Engine"; } if (prefab_available_part.FindModulesImplementing <FNNozzleController>().Count() > 0) { available_part.moduleInfo = prefab_available_part.FindModulesImplementing <FNNozzleController>().First().GetInfo(); available_part.moduleInfos.RemoveAll(modi => modi.moduleName == "Engine"); AvailablePart.ModuleInfo mod_info = available_part.moduleInfos.Where(modi => modi.moduleName == "FNNozzle Controller").First(); mod_info.moduleName = "Thermal Nozzle"; } if (prefab_available_part.CrewCapacity > 0) { Type type = AssemblyLoader.GetClassByName(typeof(PartModule), "FNModuleRadiation"); FNModuleRadiation pm = null; if (type != null) { pm = prefab_available_part.gameObject.AddComponent(type) as FNModuleRadiation; prefab_available_part.Modules.Add(pm); double rad_hardness = prefab_available_part.mass / ((double)prefab_available_part.CrewCapacity) * 7.5; pm.rad_hardness = rad_hardness; } print("Adding ModuleRadiation to " + prefab_available_part.name); } } }catch (Exception ex) { if (prefab_available_part != null) { print("[KSP Interstellar] Exception caught adding to: " + prefab_available_part.name + " part: " + ex.ToString()); } else { print("[KSP Interstellar] Exception caught adding to unknown module"); } } } } //Destroy (this); }
public void Update() { this.enabled = true; AvailablePart intakePart = PartLoader.getPartInfoByName("CircularIntake"); if (intakePart != null) { if (intakePart.partPrefab.FindModulesImplementing <AtmosphericIntake>().Count <= 0 && PartLoader.Instance.IsReady()) { plugin_init = false; } } if (!resources_configured) { // read WarpPluginSettings.cfg ConfigNode plugin_settings = GameDatabase.Instance.GetConfigNode("WarpPlugin/WarpPluginSettings/WarpPluginSettings"); if (plugin_settings != null) { if (plugin_settings.HasValue("PartTechUpgrades")) { PartTechUpgrades = new Dictionary <string, string>(); string rawstring = plugin_settings.GetValue("PartTechUpgrades"); string[] splitValues = rawstring.Split(',').Select(sValue => sValue.Trim()).ToArray(); int pairs = splitValues.Length / 2; int totalValues = splitValues.Length / 2 * 2; for (int i = 0; i < totalValues; i += 2) { PartTechUpgrades.Add(splitValues[i], splitValues[i + 1]); } Debug.Log("[KSP Interstellar] Part Tech Upgrades set to: " + rawstring); } if (plugin_settings.HasValue("OrsResourceMappings")) { OrsResourceMappings = new Dictionary <string, string>(); string rawstring = plugin_settings.GetValue("OrsResourceMappings"); string[] splitValues = rawstring.Split(',').Select(sValue => sValue.Trim()).ToArray(); int pairs = splitValues.Length / 2; int totalValues = pairs * 2; for (int i = 0; i < totalValues; i += 2) { OrsResourceMappings.Add(splitValues[i], splitValues[i + 1]); } } if (plugin_settings.HasValue("RadiationMechanicsDisabled")) { PluginHelper._radiationMechanicsDisabled = bool.Parse(plugin_settings.GetValue("RadiationMechanicsDisabled")); Debug.Log("[KSP Interstellar] Radiation Mechanics Disabled set to: " + PluginHelper.RadiationMechanicsDisabled.ToString()); } if (plugin_settings.HasValue("ThermalMechanicsDisabled")) { PluginHelper._isThermalDissipationDisabled = bool.Parse(plugin_settings.GetValue("ThermalMechanicsDisabled")); Debug.Log("[KSP Interstellar] ThermalMechanics set to : " + (!PluginHelper.IsThermalDissipationDisabled).ToString()); } if (plugin_settings.HasValue("SolarPanelClampedHeating")) { PluginHelper._isPanelHeatingClamped = bool.Parse(plugin_settings.GetValue("SolarPanelClampedHeating")); Debug.Log("[KSP Interstellar] Solar panels clamped heating set to enabled: " + PluginHelper.IsSolarPanelHeatingClamped.ToString()); } if (plugin_settings.HasValue("RecieverTempTweak")) { PluginHelper._isRecieverTempTweaked = bool.Parse(plugin_settings.GetValue("RecieverTempTweak")); Debug.Log("[KSP Interstellar] Microwave reciever CoreTemp tweak is set to enabled: " + PluginHelper.IsRecieverCoreTempTweaked.ToString()); } if (plugin_settings.HasValue("LimitedWarpTravel")) { PluginHelper._limitedWarpTravel = bool.Parse(plugin_settings.GetValue("LimitedWarpTravel")); Debug.Log("[KSP Interstellar] Apply Limited Warp Travel: " + PluginHelper.LimitedWarpTravel.ToString()); } if (plugin_settings.HasValue("MatchDemandWithSupply")) { PluginHelper._matchDemandWithSupply = bool.Parse(plugin_settings.GetValue("MatchDemandWithSupply")); Debug.Log("[KSP Interstellar] Match Demand With Supply: " + PluginHelper.MatchDemandWithSupply.ToString()); } if (plugin_settings.HasValue("MaxPowerDrawForExoticMatterMult")) { PluginHelper._maxPowerDrawForExoticMatterMult = float.Parse(plugin_settings.GetValue("MaxPowerDrawForExoticMatterMult")); Debug.Log("[KSP Interstellar] Max Power Draw For Exotic Matter Multiplier set to: " + PluginHelper.MaxPowerDrawForExoticMatterMult.ToString("0.000000")); } if (plugin_settings.HasValue("GravityConstant")) { PluginHelper._gravityConstant = Single.Parse(plugin_settings.GetValue("GravityConstant")); Debug.Log("[KSP Interstellar] Gravity constant set to: " + PluginHelper.GravityConstant.ToString("0.000000")); } if (plugin_settings.HasValue("IspCoreTempMult")) { PluginHelper._ispCoreTempMult = double.Parse(plugin_settings.GetValue("IspCoreTempMult")); Debug.Log("[KSP Interstellar] Isp core temperature multiplier set to: " + PluginHelper.IspCoreTempMult.ToString("0.000000")); } if (plugin_settings.HasValue("ElectricEngineIspMult")) { PluginHelper._electricEngineIspMult = double.Parse(plugin_settings.GetValue("ElectricEngineIspMult")); Debug.Log("[KSP Interstellar] Electric EngineIsp Multiplier set to: " + PluginHelper.ElectricEngineIspMult.ToString("0.000000")); } if (plugin_settings.HasValue("GlobalThermalNozzlePowerMaxTrustMult")) { PluginHelper._globalThermalNozzlePowerMaxThrustMult = double.Parse(plugin_settings.GetValue("GlobalThermalNozzlePowerMaxTrustMult")); Debug.Log("[KSP Interstellar] Maximum Global Thermal Power Maximum Thrust Multiplier set to: " + PluginHelper.GlobalThermalNozzlePowerMaxThrustMult.ToString("0.0")); } if (plugin_settings.HasValue("GlobalMagneticNozzlePowerMaxTrustMult")) { PluginHelper._globalMagneticNozzlePowerMaxThrustMult = double.Parse(plugin_settings.GetValue("GlobalMagneticNozzlePowerMaxTrustMult")); Debug.Log("[KSP Interstellar] Maximum Global Magnetic Nozzle Power Maximum Thrust Multiplier set to: " + PluginHelper.GlobalMagneticNozzlePowerMaxThrustMult.ToString("0.0")); } if (plugin_settings.HasValue("GlobalElectricEnginePowerMaxTrustMult")) { PluginHelper._globalElectricEnginePowerMaxThrustMult = double.Parse(plugin_settings.GetValue("GlobalElectricEnginePowerMaxTrustMult")); Debug.Log("[KSP Interstellar] Maximum Global Electric Engine Power Maximum Thrust Multiplier set to: " + PluginHelper.GlobalElectricEnginePowerMaxThrustMult.ToString("0.0")); } if (plugin_settings.HasValue("LfoFuelTrustModifier")) { PluginHelper._lfoFuelThrustModifier = double.Parse(plugin_settings.GetValue("LfoFuelTrustModifier")); Debug.Log("[KSP Interstellar] Maximum Lfo Fuel Thrust Multiplier set to: " + PluginHelper.LfoFuelThrustModifier.ToString("0.0")); } if (plugin_settings.HasValue("MaxThermalNozzleIsp")) { PluginHelper._maxThermalNozzleIsp = float.Parse(plugin_settings.GetValue("MaxThermalNozzleIsp")); Debug.Log("[KSP Interstellar] Maximum Thermal Nozzle Isp set to: " + PluginHelper.MaxThermalNozzleIsp.ToString("0.0")); } if (plugin_settings.HasValue("TrustCoreTempThreshold")) { PluginHelper._thrustCoreTempThreshold = double.Parse(plugin_settings.GetValue("TrustCoreTempThreshold")); Debug.Log("[KSP Interstellar] Thrust core temperature threshold set to: " + PluginHelper.ThrustCoreTempThreshold.ToString("0.0")); } if (plugin_settings.HasValue("LowCoreTempBaseTrust")) { PluginHelper._lowCoreTempBaseThrust = double.Parse(plugin_settings.GetValue("LowCoreTempBaseTrust")); Debug.Log("[KSP Interstellar] Low core temperature base thrust modifier set to: " + PluginHelper.LowCoreTempBaseThrust.ToString("0.0")); } if (plugin_settings.HasValue("HighCoreTempTrustMult")) { PluginHelper._highCoreTempThrustMult = double.Parse(plugin_settings.GetValue("HighCoreTempTrustMult")); Debug.Log("[KSP Interstellar] High core temperature thrust divider set to: " + PluginHelper.HighCoreTempThrustMult.ToString("0.0")); } if (plugin_settings.HasValue("BasePowerConsumption")) { PluginHelper._basePowerConsumption = double.Parse(plugin_settings.GetValue("BasePowerConsumption")); Debug.Log("[KSP Interstellar] Base Power Consumption set to: " + PluginHelper.BasePowerConsumption.ToString("0.0")); } if (plugin_settings.HasValue("PowerConsumptionMultiplier")) { PluginHelper._powerConsumptionMultiplier = double.Parse(plugin_settings.GetValue("PowerConsumptionMultiplier")); Debug.Log("[KSP Interstellar] Base Power Consumption set to: " + PluginHelper.PowerConsumptionMultiplier.ToString("0.0")); } if (plugin_settings.HasValue("IspNtrPropellantModifierBase")) { PluginHelper._ispNtrPropellantModifierBase = float.Parse(plugin_settings.GetValue("IspNtrPropellantModifierBase")); Debug.Log("[KSP Interstellar] Isp Ntr Propellant Modifier Base set to: " + PluginHelper.IspNtrPropellantModifierBase.ToString("0.0")); } if (plugin_settings.HasValue("IspElectroPropellantModifierBase")) { PluginHelper._ispElectroPropellantModifierBase = float.Parse(plugin_settings.GetValue("IspNtrPropellantModifierBase")); Debug.Log("[KSP Interstellar] Isp Ntr Propellant Modifier Base set to: " + PluginHelper.IspElectroPropellantModifierBase.ToString("0.0")); } if (plugin_settings.HasValue("ElectricEnginePowerPropellantIspMultLimiter")) { PluginHelper._electricEnginePowerPropellantIspMultLimiter = float.Parse(plugin_settings.GetValue("ElectricEnginePowerPropellantIspMultLimiter")); Debug.Log("[KSP Interstellar] Electric Engine Power Propellant IspMultiplier Limiter set to: " + PluginHelper.ElectricEnginePowerPropellantIspMultLimiter.ToString("0.0")); } if (plugin_settings.HasValue("ElectricEngineAtmosphericDensityTrustLimiter")) { PluginHelper._electricEngineAtmosphericDensityThrustLimiter = float.Parse(plugin_settings.GetValue("ElectricEngineAtmosphericDensityTrustLimiter")); Debug.Log("[KSP Interstellar] Electric Engine Power Propellant IspMultiplier Limiter set to: " + PluginHelper.ElectricEngineAtmosphericDensityThrustLimiter.ToString("0.0")); } if (plugin_settings.HasValue("MaxAtmosphericAltitudeMult")) { PluginHelper._maxAtmosphericAltitudeMult = double.Parse(plugin_settings.GetValue("MaxAtmosphericAltitudeMult")); Debug.Log("[KSP Interstellar] Maximum Atmospheric Altitude Multiplier set to: " + PluginHelper.MaxAtmosphericAltitudeMult.ToString("0.0")); } if (plugin_settings.HasValue("MinAtmosphericAirDensity")) { PluginHelper._minAtmosphericAirDensity = double.Parse(plugin_settings.GetValue("MinAtmosphericAirDensity")); Debug.Log("[KSP Interstellar] Minimum Atmospheric Air Density set to: " + PluginHelper.MinAtmosphericAirDensity.ToString("0.0")); } if (plugin_settings.HasValue("JetUpgradeTech0")) { PluginHelper.JetUpgradeTech0 = plugin_settings.GetValue("JetUpgradeTech0"); Debug.Log("[KSP Interstellar] JetUpgradeTech0" + PluginHelper.JetUpgradeTech0); } if (plugin_settings.HasValue("JetUpgradeTech1")) { PluginHelper.JetUpgradeTech1 = plugin_settings.GetValue("JetUpgradeTech1"); Debug.Log("[KSP Interstellar] JetUpgradeTech1" + PluginHelper.JetUpgradeTech1); } if (plugin_settings.HasValue("JetUpgradeTech2")) { PluginHelper.JetUpgradeTech2 = plugin_settings.GetValue("JetUpgradeTech2"); Debug.Log("[KSP Interstellar] JetUpgradeTech2" + PluginHelper.JetUpgradeTech2); } if (plugin_settings.HasValue("JetUpgradeTech3")) { PluginHelper.JetUpgradeTech3 = plugin_settings.GetValue("JetUpgradeTech3"); Debug.Log("[KSP Interstellar] JetUpgradeTech3" + PluginHelper.JetUpgradeTech3); } resources_configured = true; } else { showInstallationErrorMessage(); } } if (plugin_init) { return; } gdb = GameDatabase.Instance; plugin_init = true; List <AvailablePart> available_parts = PartLoader.LoadedPartsList; foreach (AvailablePart available_part in available_parts) { Part prefab_available_part = available_part.partPrefab; try { if (prefab_available_part.Modules == null) { continue; } ModuleResourceIntake intake = prefab_available_part.FindModuleImplementing <ModuleResourceIntake>(); if (intake != null && intake.resourceName == "IntakeAir") { var pm = prefab_available_part.gameObject.AddComponent <AtmosphericIntake>(); prefab_available_part.Modules.Add(pm); pm.area = intake.area; //pm.aoaThreshold = intake.aoaThreshold; pm.intakeTransformName = intake.intakeTransformName; //pm.maxIntakeSpeed = intake.maxIntakeSpeed; pm.unitScalar = intake.unitScalar; //pm.useIntakeCompensation = intake.useIntakeCompensation; //pm.storesResource = intake.storesResource; PartResource intake_air_resource = prefab_available_part.Resources["IntakeAir"]; if (intake_air_resource != null && !prefab_available_part.Resources.Contains(InterstellarResourcesConfiguration.Instance.IntakeAtmosphere)) { ConfigNode node = new ConfigNode("RESOURCE"); node.AddValue("name", InterstellarResourcesConfiguration.Instance.IntakeAtmosphere); node.AddValue("maxAmount", intake_air_resource.maxAmount); node.AddValue("possibleAmount", intake_air_resource.amount); prefab_available_part.AddResource(node); } } if (prefab_available_part.FindModulesImplementing <ModuleDeployableSolarPanel>().Any()) { var existingSolarControlModule = prefab_available_part.FindModuleImplementing <FNSolarPanelWasteHeatModule>(); if (existingSolarControlModule == null) { ModuleDeployableSolarPanel panel = prefab_available_part.FindModuleImplementing <ModuleDeployableSolarPanel>(); if (panel.chargeRate > 0) { //Type type = AssemblyLoader.GetClassByName(typeof(PartModule), "FNSolarPanelWasteHeatModule"); Type type = typeof(FNSolarPanelWasteHeatModule); //if (type != null) //{ FNSolarPanelWasteHeatModule pm = prefab_available_part.gameObject.AddComponent(type) as FNSolarPanelWasteHeatModule; prefab_available_part.Modules.Add(pm); //} } //if (!prefab_available_part.Resources.Contains("WasteHeat") && panel.chargeRate > 0) //{ // ConfigNode node = new ConfigNode("RESOURCE"); // node.AddValue("name", "WasteHeat"); // node.AddValue("maxAmount", panel.chargeRate * 100); // node.AddValue("possibleAmount", 0); // PartResource pr = prefab_available_part.AddResource(node); // if (available_part.resourceInfo != null && pr != null) // { // if (available_part.resourceInfo.Length == 0) // available_part.resourceInfo = pr.resourceName + ":" + pr.amount + " / " + pr.maxAmount; // else // available_part.resourceInfo = available_part.resourceInfo + "\n" + pr.resourceName + ":" + pr.amount + " / " + pr.maxAmount; // } //} } } if (prefab_available_part.FindModulesImplementing <ElectricEngineControllerFX>().Count() > 0) { available_part.moduleInfo = prefab_available_part.FindModulesImplementing <ElectricEngineControllerFX>().First().GetInfo(); available_part.moduleInfos.RemoveAll(modi => modi.moduleName == "Engine"); AvailablePart.ModuleInfo mod_info = available_part.moduleInfos.FirstOrDefault(modi => modi.moduleName == "Electric Engine Controller"); if (mod_info != null) { mod_info.moduleName = "Electric Engine"; } } } catch (Exception ex) { if (prefab_available_part != null) { print("[KSP Interstellar] Exception caught adding to: " + prefab_available_part.name + " part: " + ex.ToString()); } else { print("[KSP Interstellar] Exception caught adding to unknown module"); } } } }