public System.Collections.IEnumerator UpdateStatus()
        {
            while (true)
            {
                Log.Info(part.partInfo.title + "updateStatus");
                double numEurekas     = GetResourceAmount(EUREKAS);
                double numEurekasMax  = GetResourceMaxAmount(EUREKAS);
                double numKuarqs      = GetResourceAmount(KUARQS);
                double numKuarqsMax   = GetResourceMaxAmount(KUARQS);
                double numBioproducts = GetResourceAmount(BIOPRODUCTS);
                int    sciCount       = GetScienceCount();
                Log.Info(part.partInfo.title + " finished: " + Finished());
                if (!Finished())
                {
                    Events["DeployExperiment"].active = false;
                    Events["StartExperiment"].active  = (!Inoperable && sciCount == 0 && numEurekasMax == 0 && numKuarqsMax == 0);
                }
                else
                {
                    Events["DeployExperiment"].active = true;
                    Events["StartExperiment"].active  = false;
                }
                var    subject   = ScienceHelper.getScienceSubject(experimentID, vessel);
                string subjectId = ((subject == null) ? "" : subject.id);
                if (subjectId != "" && last_subjectId != "" && last_subjectId != subjectId &&
                    (numEurekas > 0 || numKuarqs > 0 || (numBioproducts > 0 && sciCount == 0)))
                {
                    ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_StatSci_screen_locchange", part.partInfo.title), 6, ScreenMessageStyle.UPPER_CENTER);
                    StopResearch();
                    StopResearch(BIOPRODUCTS);
                }
                last_subjectId = subjectId;
                if (sciCount > 0)
                {
                    StopResearch();
                    if (completed == 0)
                    {
                        completed = (float)Planetarium.GetUniversalTime();
                    }
                }
                if (numEurekas > 0)
                {
                    var eurekasModules = vessel.FindPartModulesImplementing <StationScienceModule>();
                    if (eurekasModules == null || eurekasModules.Count() < 1)
                    {
                        ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_StatSci_screen_detatch", part.partInfo.title), 2, ScreenMessageStyle.UPPER_CENTER);
                    }
                }

                /*
                 * if (numKuarqs > 0)
                 * {
                 *  var kuarqModules = vessel.FindPartModulesImplementing<KuarqGenerator>();
                 *  if (kuarqModules == null || kuarqModules.Count() < 1)
                 *  {
                 *      stopResearch(KUARQS);
                 *  }
                 * }
                 */
                if (numBioproducts > 0 && Inoperable)
                {
                    StopResearch(BIOPRODUCTS);
                }
                if (requirements.ContainsKey(BIOPRODUCTS) && GetScienceCount() > 0 && numBioproducts < requirements[BIOPRODUCTS].amount)
                //if (bioproductsRequired > 0 && GetScienceCount() > 0 && numBioproducts < bioproductsRequired)
                {
                    ResetExperiment();
                }
#if false
                // make sure we keep updating while changes are possible
                if (currentStatus == Status.Running ||
                    currentStatus == Status.Completed ||
                    currentStatus == Status.BadLocation)
                {
                    ReadyToDeploy(false);
                }
#endif
                ScienceExperiment experiment = ResearchAndDevelopment.GetExperiment(experimentID);
                if (currentStatus == Status.Running && !experiment.IsAvailableWhile(GetScienceSituation(vessel), vessel.mainBody))
                {
                    ScreenMessages.PostScreenMessage(Localizer.Format("Can't perform experiment here."), 6, ScreenMessageStyle.UPPER_CENTER);
                    currentStatus = Status.BadLocation;
                }


                yield return(new UnityEngine.WaitForSeconds(1f));
            }
        }
        public System.Collections.IEnumerator updateStatus()
        {
            while (true)
            {
                //print(part.partInfo.title + "updateStatus");
                double numEurekas     = getResourceAmount("Eurekas");
                double numEurekasMax  = getResourceMaxAmount("Eurekas");
                double numKuarqs      = getResourceAmount("Kuarqs");
                double numKuarqsMax   = getResourceMaxAmount("Kuarqs");
                double numBioproducts = getResourceAmount("Bioproducts");
                int    sciCount       = GetScienceCount();
                //print(part.partInfo.title + " finished: " + finished());
                if (!finished())
                {
                    Events["DeployExperiment"].active = false;
                    Events["StartExperiment"].active  = (!Inoperable && sciCount == 0 && numEurekasMax == 0 && numKuarqsMax == 0);
                }
                else
                {
                    Events["DeployExperiment"].active = true;
                    Events["StartExperiment"].active  = false;
                }
                var    subject   = ScienceHelper.getScienceSubject(experimentID, vessel);
                string subjectId = ((subject == null) ? "" : subject.id);
                if (subjectId != "" && last_subjectId != "" && last_subjectId != subjectId &&
                    (numEurekas > 0 || numKuarqs > 0 || (numBioproducts > 0 && sciCount == 0)))
                {
                    ScreenMessages.PostScreenMessage("Location changed mid-experiment! " + part.partInfo.title + " ruined.", 6, ScreenMessageStyle.UPPER_CENTER);
                    stopResearch();
                    stopResearch("Bioproducts");
                }
                last_subjectId = subjectId;
                if (sciCount > 0)
                {
                    stopResearch();
                    if (completed == 0)
                    {
                        completed = (float)Planetarium.GetUniversalTime();
                    }
                }
                if (numEurekas > 0)
                {
                    var eurekasModules = vessel.FindPartModulesImplementing <StationScienceModule>();
                    if (eurekasModules == null || eurekasModules.Count() < 1)
                    {
                        ScreenMessages.PostScreenMessage("Warning: " + part.partInfo.title + " has detached from the station without being finalized.", 2, ScreenMessageStyle.UPPER_CENTER);
                    }
                }

                /*
                 * if (numKuarqs > 0)
                 * {
                 *  var kuarqModules = vessel.FindPartModulesImplementing<KuarqGenerator>();
                 *  if (kuarqModules == null || kuarqModules.Count() < 1)
                 *  {
                 *      stopResearch("Kuarqs");
                 *  }
                 * }
                 */
                if (numBioproducts > 0 && Inoperable)
                {
                    stopResearch("Bioproducts");
                }
                if (bioproductsRequired > 0 && GetScienceCount() > 0 && numBioproducts < bioproductsRequired)
                {
                    ResetExperiment();
                }
                yield return(new UnityEngine.WaitForSeconds(1f));
            }
        }