Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
        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
                    }
                }
            }
        }
Exemplo n.º 3
0
        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;
 }