Exemplo n.º 1
0
        public void Transmit()
        {
            var data = experiment.GetData();

            for (int i = 0; i < data.Length; i++)
            {
                // Use ExperimentResultDialogPage to compute the science value
                // This object creation modifies the data object
                new ExperimentResultDialogPage(
                    experiment.part, data[i], data[i].baseTransmitValue, data[i].transmitBonus,
                    false, string.Empty, false,
                    new ScienceLabSearch(experiment.part.vessel, data[i]),
                    null, null, null, null);
            }
            var transmitter = ScienceUtil.GetBestTransmitter(experiment.vessel);

            if (transmitter == null)
            {
                throw new InvalidOperationException("No transmitters available to transmit the data");
            }
            transmitter.TransmitData(data.ToList());
            for (int i = 0; i < data.Length; i++)
            {
                experiment.DumpData(data[i]);
            }
            if (experiment.useCooldown)
            {
                experiment.cooldownToGo = experiment.cooldownTimer;
            }
        }
Exemplo n.º 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);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
 public void Dump()
 {
     foreach (var data in experiment.GetData())
     {
         experiment.DumpData(data);
     }
 }
 /// <summary>
 /// Attempts to call DumpData() on subclasses. Falls back to default on failure.
 /// </summary>
 /// <param name="moduleScienceExperiment"></param>
 /// <param name="scienceData"></param>
 public static void DumpDataUsingReflection(this ModuleScienceExperiment moduleScienceExperiment, ScienceData scienceData)
 {
     try {
         moduleScienceExperiment.GetType().InvokeMember("DumpData", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreReturn | System.Reflection.BindingFlags.InvokeMethod, null, moduleScienceExperiment, new object[] { scienceData });
     } catch {
         moduleScienceExperiment.DumpData(scienceData);
     }
 }
Exemplo n.º 5
0
 public void SaveExperiment(Vessel vessel)
 {
     if (persistentId != 0)
     {
         ModuleScienceExperiment mod = vessel.FindPartModulesImplementing <ModuleScienceExperiment>()
                                       .Where(m => (m.part.persistentId == persistentId) && (m.experimentID == experimentID))
                                       .First();
         mod.Inoperable = inoperable;
         if (inoperable)
         {
             mod.Deployed = true;
             mod.SetInoperable();
             mod.DumpData(null);
         }
         else
         {
             mod.DumpData(null);
             mod.ResetExperiment();
         }
     }
 }