// Find associated Engine module public ModuleSystemHeatFissionEngine FindEngineModule(Part part, string moduleName) { ModuleSystemHeatFissionEngine engine = part.GetComponents <ModuleSystemHeatFissionEngine>().ToList().Find(x => x.moduleID == moduleName); if (engine == null) { KSHUtils.LogError($"[{part}] No ModuleSystemHeatFissionEngine named {moduleName} was found, using first instance"); engineModule = part.GetComponents <ModuleSystemHeatFissionEngine>().ToList().First(); } if (engine == null) { KSHUtils.LogError($"[{part}] No ModuleSystemHeatFissionEngine was found."); } return(engine); }
// Find associated Reactor module public ModuleSystemHeatFissionReactor FindReactorModule(Part part, string moduleName) { ModuleSystemHeatFissionReactor reactor = part.GetComponents <ModuleSystemHeatFissionReactor>().ToList().Find(x => x.moduleID == moduleName); if (reactor == null) { KSHUtils.LogError($"[{part}] No ModuleSystemHeatFissionReactor named {moduleName} was found, using first instance."); reactorModule = part.GetComponents <ModuleSystemHeatFissionReactor>().ToList().First(); } if (reactor == null) { KSHUtils.LogError($"[{part}] No ModuleSystemHeatFissionReactor was found."); } return(reactor); }
public virtual void Start() { if (Lib.IsFlight() || Lib.IsEditor()) { if (engineModule == null) { engineModule = FindEngineModule(part, engineModuleID); } if (Features.Radiation && emitter == null) { emitter = FindEmitterModule(part); } if (FirstLoad) { if (emitter != null) { EmitterMaxRadiation = emitter.radiation; if (EmitterMaxRadiation < 0) { EmitterMaxRadiation = 0d; } } if (engineModule != null) { MaxECGeneration = engineModule.ElectricalGeneration.Evaluate(100f); MinThrottle = engineModule.MinimumThrottle / 100f; GeneratesElectricity = engineModule.GeneratesElectricity; LastReactorState = engineModule.Enabled; } if (inputs == null || inputs.Count == 0) { ConfigNode node = ModuleUtils.GetModuleConfigNode(part, moduleName); if (node != null) { OnLoad(node); } } FirstLoad = false; } else { EmitterRunning = true; } } }
/// <summary> /// Test to see if this part can transfter resources /// </summary> /// <param name="nm"></param> /// <returns></returns> protected bool CheckPartRequirements() { // Some modules need to be off. ModuleSystemHeat heat = GetComponent <ModuleSystemHeat>(); ModuleSystemHeatConverter[] converters = GetComponents <ModuleSystemHeatConverter>(); ModuleSystemHeatFissionReactor reactor = GetComponent <ModuleSystemHeatFissionReactor>(); ModuleSystemHeatFissionEngine engine = GetComponent <ModuleSystemHeatFissionEngine>(); // Fail if a converter is on foreach (ModuleSystemHeatConverter converter in converters) { if (converter != null && converter.ModuleIsActive()) { ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_SystemHeat_ModuleSystemHeatFissionFuelContainer_Message_AbortFromRunningConverter"), 5.0f, ScreenMessageStyle.UPPER_CENTER)); return(false); } } // Fail if a reactor is on if (reactor != null && reactor.Enabled) { ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_SystemHeat_ModuleSystemHeatFissionFuelContainer_Message_AbortFromRunningReactor"), 5.0f, ScreenMessageStyle.UPPER_CENTER)); return(false); } //Fail if an nuclear engine is on if (engine != null && engine.Enabled) { ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_SystemHeat_ModuleSystemHeatFissionFuelContainer_Message_AbortFromRunningReactor"), 5.0f, ScreenMessageStyle.UPPER_CENTER)); return(false); } // Fail if the part is too hot if (heat != null && heat.LoopTemperature > MaxTemperatureForRefuel) { ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_SystemHeat_ModuleSystemHeatFissionFuelContainer_Message_AbortTooHot", MaxTemperatureForRefuel.ToString("F0")), 5.0f, ScreenMessageStyle.UPPER_CENTER)); return(false); } return(true); }