// Finds a list of all fission containers
        List <FissionContainer> FindFissionContainers()
        {
            List <FissionContainer> fissionContainers = new List <FissionContainer>();
            List <Part>             allParts          = this.vessel.parts;

            foreach (Part pt in allParts)
            {
                PartModuleList pml = pt.Modules;
                for (int i = 0; i < pml.Count; i++)
                {
                    PartModule       curModule = pml.GetModule(i);
                    FissionContainer candidate = curModule.GetComponent <FissionContainer>();

                    if (candidate != null)
                    {
                        fissionContainers.Add(candidate);
                    }
                }
            }
            if (fissionContainers.Count == 0)
            {
                ScreenMessages.PostScreenMessage(new ScreenMessage("No nuclear fuel containers attached to this ship.", 4f, ScreenMessageStyle.UPPER_CENTER));
            }
            return(fissionContainers);
        }
        // ####################################
        // Refuelling
        // ####################################


        // Tries to refeul the reactor
        void TryRefuel()
        {
            if (Enabled || CurrentCoreTemperature > 0f)
            {
                ScreenMessages.PostScreenMessage(new ScreenMessage("Cannot refuel while reactor is running or hot!", 4f, ScreenMessageStyle.UPPER_CENTER));
                return;
            }
            else
            {
                Debug.Log("NFPP: Searching for valid containers...");
                FissionContainer from = FindValidFissionContainer();
                if (from != null)
                {
                    Debug.Log("NFPP: Refuelling valid container...");
                    from.RefuelReactorFromContainer(this, this.part.Resources.Get(PartResourceLibrary.Instance.GetDefinition("DepletedUranium").id).amount);
                }
            }
        }
        public override void OnFixedUpdate()
        {
            if (Enabled)
            {
                if (workContainer == null)
                {
                    // try to get a container, turn us off if we can't find any
                    workContainer = FindValidFissionContainer();
                    if (workContainer == null)
                    {

                        StopReprocessing();
                        Status = "No waste found";
                        return;
                    }
                }

                // consume power
                double power = this.part.RequestResource("ElectricCharge", EnergyCost * TimeWarp.fixedDeltaTime);

                if (power <= 0d)
                {
                    Status = "Not enough Electric Charge!";
                }
                else
                {
                    Status = String.Format("Processing at: {0:F0} U/s",ReprocessRate);
                    double wasteRefined = workContainer.part.RequestResource("DepletedUranium", ReprocessRate * TimeWarp.fixedDeltaTime);
                    if (wasteRefined >= 0d)
                    {
                        workContainer.part.RequestResource("EnrichedUranium", wasteRefined * RecycleEfficiency);

                    }
                }
            }
        }
        public override void OnFixedUpdate()
        {
            if (Enabled)
            {
                if (workContainer == null)
                {
                    // try to get a container, turn us off if we can't find any
                    workContainer = FindValidFissionContainer();
                    if (workContainer == null)
                    {
                        StopReprocessing();
                        Status = "No waste found";
                        return;
                    }
                }



                // consume power
                double power = this.part.RequestResource("ElectricCharge", EnergyCost * TimeWarp.fixedDeltaTime);

                if (power <= 0d)
                {
                    Status = "Not enough Electric Charge!";
                }
                else
                {
                    Status = String.Format("Processing at: {0:F0} U/s", ReprocessRate);
                    double wasteRefined = workContainer.part.RequestResource("DepletedUranium", ReprocessRate * TimeWarp.fixedDeltaTime);
                    if (wasteRefined >= 0d)
                    {
                        workContainer.part.RequestResource("EnrichedUranium", wasteRefined * RecycleEfficiency);
                    }
                }
            }
        }