コード例 #1
0
        public override void TransmitData()
        {
            ThrowIfNotCPUVessel();

            IScienceDataContainer container = module as IScienceDataContainer;

            ScienceData[] data = container.GetData();

            List <IScienceDataTransmitter> tranList = module.vessel.FindPartModulesImplementing <IScienceDataTransmitter>();

            if (tranList.Count() > 0 && data.Count() > 0)
            {
                tranList.OrderBy(ScienceUtil.GetTransmitterScore).First().TransmitData(new List <ScienceData>(data));

                if (!container.IsRerunnable())
                {
                    module.SetInoperable();
                }

                DumpData();
            }
            else
            {
                ScreenMessages.PostScreenMessage("No transmitters available on this vessel or no data to transmit.", 4f, ScreenMessageStyle.UPPER_LEFT);
            }
        }
コード例 #2
0
ファイル: ScienceExperimentFields.cs プロジェクト: pgodd/KOS
        private void DumpData()
        {
            if (!module.rerunnable)
            {
                module.SetInoperable();
            }

            dumpDataMethod.Invoke(module, new object[] { });
        }
コード例 #3
0
ファイル: Experiment.cs プロジェクト: dewiniaid/krpc
        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();
        }
コード例 #4
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();
         }
     }
 }
コード例 #5
0
 private void createScienceDMagic(ModuleScienceExperiment currentExperiment, ScienceSubject currentScienceSubject, float currentScienceValue)
 {
     var scienceData = new ScienceData(currentScienceValue, currentExperiment.xmitDataScalar, 0, currentScienceSubject.id, currentScienceSubject.title);
       try
       {
     currentExperiment.GetType().InvokeMember("deployEvent", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreReturn | System.Reflection.BindingFlags.InvokeMethod, null, currentExperiment, null);
       }
       catch (Exception)
       {
       }
       if (!currentExperiment.rerunnable)
       {
     currentExperiment.SetInoperable();
     GameEvents.OnExperimentDeployed.Fire(scienceData);
       }
       container.AddData(scienceData);
 }
コード例 #6
0
        protected bool isInstrumentOk()
        {
            //MerillData.log("SCIENCE! isInstrumentOk isInactive="+isInactive+" for part "+part.name);
            if (isInactive)
            {
                return(false);
            }

            float chance = 15 + 40f / ((((float)MerillData.instance.partNameTested.Count) / 8f) + 1);

            // luck?
            int peudoAleat = MerillData.instance.get0to99FromNotAleatTable("science_" + part.name + "_vessel_" + part.vessel.id.ToString());

            print("[MERILL][Mun Rush] experiment " + part.name + " self-testing : " + peudoAleat + " ?> " + chance);

            isInactive = peudoAleat < chance;

            //Here, can send event to btsmExperiemnt, like "set inactive" "set dead"
            if (isInactive)
            {
                //TODO: use a field to get displaymessage (and rand to get one)
                //set the display to "dead"
                stateDisplay = "Dead";
                if (scienceExperiment != null)
                {
                    //MerillData.log("sciecnefail set to inoperable");
                    scienceExperiment.SetInoperable();
                }

                MerillData.instance.nbPartDestroy++;
                if (!MerillData.instance.partNameCrashed.Contains(part.name + "_Break"))
                {
                    MerillData.instance.partNameCrashed.Add(part.name + "_Break");
                }

                if (!MerillData.instance.partNameTested.Contains(part.name + "_Break"))
                {
                    MerillData.instance.partNameTested.Add(part.name + "_Break");
                    MerillData.instance.nbPartTested++;
                }
                //emit message
                //ScreenMessages.PostScreenMessage("Experiment " + part.partInfo.title.ToString()
                //	+ " is not working anymore, something britlle or delicate has fail."
                //	, 10f, ScreenMessageStyle.UPPER_LEFT);
                ScreenMessages.PostScreenMessage(string.Format(MerillData.str_science_fail, part.partInfo.title.ToString())
                                                 , 10f, ScreenMessageStyle.UPPER_LEFT);
                //maj gui
                BaseEvent merillScienceEvent = Events["MERILLScienceEventDeployOrTest"];
                if (merillScienceEvent != null)
                {
                    merillScienceEvent.guiActive = false;
                }
                BaseAction merillScienceAction = Actions["MERILLScienceActionDeployOrTest"];
                if (merillScienceAction != null)
                {
                    merillScienceAction.active = false;
                }
            }

            //fail
            return(!isInactive);
        }