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); }
void RunScience() // this is primary business logic for finding and running valid experiments { if (GetExperimentList() == null) // hey, it can happen! { Debug.Log("[ForScience!] There are no experiments."); } else { foreach (ModuleScienceExperiment currentExperiment in GetExperimentList()) // loop through all the experiments onboard { ScienceExperiment se = ResearchAndDevelopment.GetExperiment(currentExperiment.experimentID); Debug.Log("[ForScience!] Checking experiment id: " + se.id + " title: " + se.experimentTitle + " unlocked: " + se.IsUnlocked() + " isAvail: " + se.IsAvailableWhile(currentSituation(), currentBody())); ScienceSubject ss = currentScienceSubject(se); //Debug.Log("ScienceSubject experiment id: " + ss.id + " title: " + ss.title); ModuleScienceExperiment me = currentExperiment; /*Debug.Log("Module Experiment id: " + me.experimentID + " cooldown: " + me.cooldownToGo + " collectable: " + me.dataIsCollectable + " deployed: " + me.Deployed + " enabled: " + me.isEnabled + " rerunnable: " + me.IsRerunnable() + " module: " + me.moduleName + " objname: " + me.name + " resettable: " + me.resettable + " resOnEVA: " + me.resettableOnEVA);*/ if (ActiveContainer().HasData(newScienceData(currentExperiment))) // skip data we already have onboard { Debug.Log("[ForScience!] Skipping: We already have that data onboard."); } else if (!surfaceSamplesUnlocked() && se.id == "surfaceSample") // check to see is surface samples are unlocked { Debug.Log("[ForScience!] Skipping: Surface Samples are not unlocked."); } else if (!me.IsRerunnable() && (!(me.resettable || me.resettableOnEVA) || !IsScientistOnBoard())) // no cheating goo and materials here { Debug.Log("[ForScience!] Skipping: Experiment is not repeatable (and/or resettable)."); } else if (!se.IsAvailableWhile(currentSituation(), currentBody())) // this experiement isn't available here so we skip it { Debug.Log("[ForScience!] Skipping: Experiment is not available for this situation/atmosphere."); } else if (me.useCooldown && me.cooldownToGo > 0) { Debug.Log("[ForScience!] Skipping: Experiment on cooldown for " + me.cooldownToGo + " seconds."); } else if (currentScienceValue(currentExperiment) < 0.1) // this experiment has no more value so we skip it { Debug.Log("[ForScience!] Skipping: No more science is available."); } else { Debug.Log("[ForScience!] Running experiment: " + ss.id); ActiveContainer().AddData(newScienceData(currentExperiment)); //manually add data to avoid deployexperiment state issues } } } }
public void Transmit() { var data = experiment.GetData(); if (!data.Any()) { return; } var transmitters = experiment.vessel.FindPartModulesImplementing <IScienceDataTransmitter> (); if (!transmitters.Any()) { throw new InvalidOperationException("No transmitters available to transmit the data"); } transmitters.OrderBy(ScienceUtil.GetTransmitterScore).First().TransmitData(data.ToList()); if (!experiment.IsRerunnable()) { experiment.SetInoperable(); } Dump(); }
private void CheckForDataToCollect(ModuleScienceExperiment currentExperiment) { if (IsDataToCollect) return; if (!currentSettings.getBool("transferScience")) return; if (currentExperiment.Deployed && currentExperiment.dataIsCollectable) { if (currentExperiment.IsRerunnable() && !currentSettings.getBool("transferAll")) return; IsDataToCollect = true; } }
private bool canTransfer(ModuleScienceExperiment thisExperiment, ScienceData[] containingData) { if (!thisExperiment.IsRerunnable()) { if (currentSettings.getBool("transferAll")) { return true; } else { return false; } } if (!currentSettings.getBool("dumpDuplicateResults")) { foreach (var data in thisExperiment.GetData()) { if (containingData.Contains(data)) { return false; } } } return true; }