public bool CanTransfer(ModuleScienceExperiment baseExperiment, ModuleScienceContainer moduleScienceContainer)
 {
     if (baseExperiment.GetScienceCount() == 0)
     {
         _AutomatedScienceSamplerInstance.Log(baseExperiment.experimentID, ": Experiment has no data skiping transfer ", baseExperiment.GetScienceCount());
         return(false);
     }
     if (!baseExperiment.IsRerunnable())
     {
         if (!_AutomatedScienceSamplerInstance.craftSettings.transferAllData)
         {
             _AutomatedScienceSamplerInstance.Log(baseExperiment.experimentID, ": Experiment isn't rerunnable and transferAllData is turned off.");
             return(false);
         }
     }
     if (!_AutomatedScienceSamplerInstance.craftSettings.dumpDuplicates)
     {
         foreach (var data in baseExperiment.GetData())
         {
             if (moduleScienceContainer.HasData(data))
             {
                 _AutomatedScienceSamplerInstance.Log(baseExperiment.experimentID, ": Target already has experiment and dumping is disabled.");
                 return(false);
             }
         }
     }
     _AutomatedScienceSamplerInstance.Log(baseExperiment.experimentID, ": We can transfer the science!");
     return(true);
 }
Example #2
0
        private void OnExperimentsResultDialogClosed()
        {
            if (FlightGlobals.ActiveVessel != null)
            {
                // get all container modules on the vessel
                List <ModuleScienceContainer> containers = FlightGlobals.ActiveVessel.FindPartModulesImplementing <ModuleScienceContainer>();

                // iterate over the containers
                for (int containerIndex = 0; containerIndex < containers.Count; containerIndex++)
                {
                    ModuleScienceContainer container = containers[containerIndex];

                    // get all the experiment modules attached to the same part as the container
                    List <ModuleScienceExperiment> experiments = container.part.FindModulesImplementing <ModuleScienceExperiment>();

                    // iterate over the experiments
                    for (int experimentIndex = 0; experimentIndex < experiments.Count; experimentIndex++)
                    {
                        ModuleScienceExperiment experiment = experiments[experimentIndex];

                        // check that experiment has available data
                        if (experiment.GetScienceCount() > 0)
                        {
                            // get both the container and experiment data for duplicate checking
                            ScienceData[] containerDataArray  = container.GetData();
                            ScienceData[] experimentDataArray = experiment.GetData();

                            // iterate over the experiment data
                            foreach (ScienceData experimentData in experimentDataArray)
                            {
                                bool allowDataTransfer = true;

                                // check for duplicates in the container data
                                foreach (ScienceData containerData in containerDataArray)
                                {
                                    if (containerData.subjectID == experimentData.subjectID)
                                    {
                                        allowDataTransfer = false;

                                        // discard duplicates
                                        if (HighLogic.CurrentGame.Parameters.CustomParams <SMR>().discardDuplicates)
                                        {
                                            experiment.DumpData(experimentData);
                                        }
                                    }
                                }

                                // transfer data from experiment to container
                                if (allowDataTransfer)
                                {
                                    experiment.DumpData(experimentData);
                                    container.AddData(experimentData);
                                }
                            }
                        }
                    }
                }
            }
        }
Example #3
0
        public bool CanReset(ModuleScienceExperiment baseExperiment)
        {
            Log(baseExperiment.experimentID, ": CanReset");
            if (!baseExperiment.Inoperable)
            {
                Log(baseExperiment.experimentID, ": Experiment isn't inoperable");
                return(false);
            }
            if (!baseExperiment.Deployed)
            {
                Log(baseExperiment.experimentID, ": Experiment isn't deployed!");
                return(false);
            }
            if (baseExperiment.GetScienceCount() > 0)
            {
                Log(baseExperiment.experimentID, ": Experiment has data!");
                return(false);
            }

            if (!baseExperiment.resettable)
            {
                Log(baseExperiment.experimentID, ": Experiment isn't resetable");
                return(false);
            }
            bool hasScientist = false;

            foreach (var crew in FlightGlobals.ActiveVessel.GetVesselCrew())
            {
                if (crew.trait == "Scientist")
                {
                    hasScientist = true;
                    break;
                }
            }
            if (!hasScientist)
            {
                Log(baseExperiment.experimentID, ": Vessel has no scientist");
                return(false);
            }
            Log(baseExperiment.experimentID, ": Can reset");
            return(true);
        }
Example #4
0
 private static string formatExperiment(ModuleScienceExperiment experiment)
 {
     return(string.Format("{0} ({1})", experiment.part.partInfo.title, experiment.GetScienceCount() == 0 ? "empty" : experiment.GetScienceCount() + " data"));
 }