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); }
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); } } } } } } }
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); }
private static string formatExperiment(ModuleScienceExperiment experiment) { return(string.Format("{0} ({1})", experiment.part.partInfo.title, experiment.GetScienceCount() == 0 ? "empty" : experiment.GetScienceCount() + " data")); }