示例#1
0
        // 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);
        }
示例#3
0
 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);
        }