コード例 #1
0
        public static void StoreData(this IScienceDataContainer container, IScienceDataContainer experiment, bool dumpDuplicates)
        {
            if (container == experiment as IScienceDataContainer)
            {
                ScreenMessages.PostScreenMessage("Container is the same as experiment!", 1f, ScreenMessageStyle.UPPER_LEFT);
                return;
            }
            var containerData  = container.GetData();
            var experimentData = experiment.GetData();

            for (var i = 0; i < experimentData.Length; i++)
            {
                if (!container.HasData(experimentData[i]))
                {
                    container.ReturnData(experimentData[i]);
                    if (container.HasData(experimentData[i]))
                    {
                        experiment.DumpData(experimentData[i]);
                    }
                    else
                    {
                        ScreenMessages.PostScreenMessage("Container didnt store the experiment", 1f, ScreenMessageStyle.UPPER_LEFT);
                    }
                }
                else if (dumpDuplicates)
                {
                    experiment.DumpData(experimentData[i]);
                }
            }
        }
コード例 #2
0
        public void Transmit()
        {
            var data = dataContainer.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++)
            {
                dataContainer.DumpData(data[i]);
            }
            if (experiment.useCooldown)
            {
                experiment.cooldownToGo = experiment.cooldownTimer;
            }
        }
コード例 #3
0
        public override void OnUpdate()
        {
            base.OnUpdate();

            if (anim == null)
            {
                return;
            }

            //We're only interested in the act of inflating the module.
            if (isDeployed == false)
            {
                animationStarted = false;
                return;
            }

            //If we've completed the animation then we are done.
            if (animationStarted == false)
            {
                return;
            }

            //Animation may not be done yet.
            if (anim.isPlaying)
            {
                return;
            }

            //At this point we know that the animation was playing but has now stopped.
            //We also know that the animation was started. Now reset the flag.
            animationStarted = false;

            //Hide seismometer
            if (impactSeismometer != null)
            {
                IScienceDataContainer container = (IScienceDataContainer)impactSeismometer;

                BaseEvent reviewEvent = impactSeismometer.Events["reviewEvent"];
                if (reviewEvent != null)
                {
                    reviewEvent.guiActive          = false;
                    reviewEvent.guiActiveUnfocused = false;
                }

                //clear out the impact data if the current template isn't a geology lab
                if (CurrentTemplateName != "Geology Lab")
                {
                    ScienceData[] dataItems = container.GetData();
                    if (dataItems != null)
                    {
                        foreach (ScienceData doomed in dataItems)
                        {
                            container.DumpData(doomed);
                        }
                    }
                }
            }

            checkAndShowToolTip();
        }
コード例 #4
0
ファイル: Lib.cs プロジェクト: Maeyanie/Kerbalism
		// remove one experiment at random from the vessel
		public static void RemoveData(Vessel v)
		{
			// stock science system
			if (!Features.Science)
			{
				// if vessel is loaded
				if (v.loaded)
				{
					// get all science containers/experiments with data
					List<IScienceDataContainer> modules = Lib.FindModules<IScienceDataContainer>(v).FindAll(k => k.GetData().Length > 0);

					// remove a data sample at random
					if (modules.Count > 0)
					{
						IScienceDataContainer container = modules[Lib.RandomInt(modules.Count)];
						ScienceData[] data = container.GetData();
						container.DumpData(data[Lib.RandomInt(data.Length)]);
					}
				}
				// if not loaded
				else
				{
					// get all science containers/experiments with data
					var modules = new List<ProtoPartModuleSnapshot>();
					modules.AddRange(Lib.FindModules(v.protoVessel, "ModuleScienceContainer").FindAll(k => k.moduleValues.GetNodes("ScienceData").Length > 0));
					modules.AddRange(Lib.FindModules(v.protoVessel, "ModuleScienceExperiment").FindAll(k => k.moduleValues.GetNodes("ScienceData").Length > 0));

					// remove a data sample at random
					if (modules.Count > 0)
					{
						ProtoPartModuleSnapshot container = modules[Lib.RandomInt(modules.Count)];
						ConfigNode[] data = container.moduleValues.GetNodes("ScienceData");
						container.moduleValues.RemoveNode(data[Lib.RandomInt(data.Length)]);
					}
				}
			}
			// our own science system
			else
			{
				// select a file at random and remove it
				Drive drive = DB.Vessel(v).drive;
				if (drive.files.Count > 0) //< it should always be the case
				{
					string filename = string.Empty;
					int i = Lib.RandomInt(drive.files.Count);
					foreach (var pair in drive.files)
					{
						if (i-- == 0)
						{
							filename = pair.Key;
							break;
						}
					}
					drive.files.Remove(filename);
				}
			}
		}
コード例 #5
0
ファイル: WBIPathfinderLab.cs プロジェクト: MrKiel/Pathfinder
        protected override void setupPartModules()
        {
            base.setupPartModules();

            //Setup the science container
            if (scienceContainer == null)
            {
                scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();
                scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = false;
                scienceContainer.Events["ReviewDataEvent"].guiActive          = false;

                //Terrain uplink
                terrainUplinkView.part             = this.part;
                terrainUplinkView.scienceContainer = scienceContainer;
            }

            //Kerbnet access
            kerbNetAccess = this.part.FindModuleImplementing <ModuleKerbNetAccess>();
            if (kerbNetAccess != null)
            {
            }

            //Grab the seismometer (if any)
            foreach (PartModule mod in this.part.Modules)
            {
                if (mod.moduleName == "Seismometer")
                {
                    impactSeismometer = mod;
                    impactSensor      = (IScienceDataContainer)impactSeismometer;
                    ScienceData[] impactData = impactSensor.GetData();

                    foreach (ScienceData data in impactData)
                    {
                        scienceContainer.AddData(data);
                    }
                    foreach (ScienceData doomed in impactData)
                    {
                        impactSensor.DumpData(doomed);
                    }
                    break;
                }
            }
        }
コード例 #6
0
 public void analyze(IScienceDataContainer cont, ScienceData sd)
 {
     //print(sd.title);
     if (GetScienceCount() > 0)
     {
         ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_StatSci_screen_analyseFull"), 6, ScreenMessageStyle.UPPER_CENTER);
         return;
     }
     cont.DumpData(sd);
     this.AddData(sd);
     if (kuarqsRequired > 0)
     {
         setResourceMaxAmount("Kuarqs", kuarqsRequired);
         Events["ReviewDataEvent"].guiActive = false;
     }
     else
     {
         sd.baseTransmitValue = txValue;
         this.ReviewData();
     }
     this.updateList();
 }
コード例 #7
0
 public void analyze(IScienceDataContainer cont, ScienceData sd)
 {
     //print(sd.title);
     if (GetScienceCount() > 0)
     {
         ScreenMessages.PostScreenMessage("Analyzer already full. Transmit the data!", 6, ScreenMessageStyle.UPPER_CENTER);
         return;
     }
     cont.DumpData(sd);
     this.AddData(sd);
     if (kuarqsRequired > 0)
     {
         setResourceMaxAmount("Kuarqs", kuarqsRequired);
         Events["ReviewDataEvent"].guiActive = false;
     }
     else
     {
         sd.transmitValue = txValue;
         this.ReviewData();
     }
     this.updateList();
 }
コード例 #8
0
 void TransmitData(ScienceData data, IScienceDataContainer container)
 {
     if (TransmittingScience.ContainsKey(data.subjectID))
     {
         Debug.Log("[MoarScience!] transmitting queue already has: " + data.subjectID);
         return;
     }
     if (data.baseTransmitValue < 0.40)
     {
         // Debug.Log("[MoarScience!] transmit value is less than 40%: " + data.subjectID);
         return;
     }
     // we check for a transmitter late because of logspam from remotetech
     if (transmitter == null)
     {
         Debug.Log("[MoarScience!] have science to transfer but no transmitter/connection");
         return;
     }
     AddSubjectIDToDict(TransmittingScience, data.subjectID);
     transmitter.TransmitData(new List <ScienceData> {
         data
     });
     container.DumpData(data);
 }
コード例 #9
0
        private void transferToVessel(ScienceRelayData RelayData)
        {
            if (resultsDialog != null)
            {
                resultsDialog.Dismiss();
            }

            if (RelayData._host == null || RelayData._data == null || RelayData._target == null || RelayData._source == null)
            {
                return;
            }

            List <ScienceRelayData> data = new List <ScienceRelayData>();

            if (transferAll)
            {
                for (int i = resultsDialog.pages.Count - 1; i >= 0; i--)
                {
                    ExperimentResultDialogPage page = resultsDialog.pages[i];

                    if (page == null)
                    {
                        continue;
                    }

                    if (page.pageData == null)
                    {
                        continue;
                    }

                    if (page.host == null)
                    {
                        continue;
                    }

                    ScienceRelayData relayData = new ScienceRelayData()
                    {
                        _data   = page.pageData,
                        _host   = page.host,
                        _boost  = signalBoost(RelayData._boost + 1, RelayData._target, page.pageData, page.xmitDataScalar),
                        _target = RelayData._target,
                        _source = RelayData._source,
                    };

                    relayData._data.baseTransmitValue = page.xmitDataScalar;

                    data.Add(relayData);
                }
            }
            else
            {
                RelayData._data.baseTransmitValue = currentPage.xmitDataScalar;
                data.Add(RelayData);
            }

            for (int i = data.Count - 1; i >= 0; i--)
            {
                ScienceData d = data[i]._data;

                Part host = data[i]._host;

                List <IScienceDataContainer> containers = host.FindModulesImplementing <IScienceDataContainer>();

                IScienceDataContainer hostContainer = null;

                for (int j = containers.Count - 1; j >= 0; j--)
                {
                    hostContainer = null;

                    IScienceDataContainer container = containers[j];

                    if (container == null)
                    {
                        continue;
                    }

                    ScienceData[] containerData = container.GetData();

                    for (int k = containerData.Length - 1; k >= 0; k--)
                    {
                        ScienceData dat = containerData[k];

                        if (dat.subjectID == d.subjectID)
                        {
                            hostContainer = container;
                            break;
                        }
                    }

                    if (hostContainer != null)
                    {
                        break;
                    }
                }

                IScienceDataTransmitter bestTransmitter = ScienceUtil.GetBestTransmitter(RelayData._source.FindPartModulesImplementing <IScienceDataTransmitter>());

                if (bestTransmitter == null)
                {
                    if (CommNetScenario.CommNetEnabled)
                    {
                        ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238505"), 3, ScreenMessageStyle.UPPER_CENTER);
                    }
                    else
                    {
                        ScreenMessages.PostScreenMessage(Localizer.Format("#autoLOC_238507"), 3, ScreenMessageStyle.UPPER_CENTER);
                    }
                }
                else
                {
                    d.triggered = true;

                    bestTransmitter.TransmitData(new List <ScienceData> {
                        d
                    });

                    queuedData.Add(data[i]);

                    if (hostContainer != null)
                    {
                        hostContainer.DumpData(d);
                    }
                }
            }
        }
コード例 #10
0
        public virtual void DumpData()
        {
            ThrowIfNotCPUVessel();

            Array.ForEach(container.GetData(), (d) => container.DumpData(d));
        }
コード例 #11
0
ファイル: WBIGeologyLab.cs プロジェクト: ozraven/Pathfinder
        public override void OnStart(StartState state)
        {
            base.OnStart(state);
            SetGuiVisible(false);
            showResults = false;

            resourceList = ResourceMap.Instance.GetResourceItemList(HarvestTypes.Planetary, this.part.vessel.mainBody);

            gps          = this.part.FindModuleImplementing <ModuleGPS>();
            biomeScanner = this.part.FindModuleImplementing <ModuleBiomeScanner>();
            hideStockGUI();

            //Grab the seismometer (if any)
            foreach (PartModule mod in this.part.Modules)
            {
                if (mod.moduleName == "Seismometer")
                {
                    impactSeismometer = mod;
                    impactSensor      = (IScienceDataContainer)impactSeismometer;
                    break;
                }
            }

            //Create swizzler
            swizzler            = new WBIResultsDialogSwizzler();
            swizzler.onTransmit = transmitData;

            //Setup the science container
            scienceContainer = this.part.FindModuleImplementing <ModuleScienceContainer>();
            scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = false;
            scienceContainer.Events["ReviewDataEvent"].guiActive          = false;

            if (impactSensor != null)
            {
                ScienceData[] impactData = impactSensor.GetData();

                foreach (ScienceData data in impactData)
                {
                    scienceContainer.AddData(data);
                }
                foreach (ScienceData doomed in impactData)
                {
                    impactSensor.DumpData(doomed);
                }
            }

            //Terrain uplink
            terrainUplinkView.part             = this.part;
            terrainUplinkView.scienceContainer = scienceContainer;

            //Elapsed time for current experiment
            if (ModuleIsActive())
            {
                //Get the new elapsed time.
                int elapsedTimeIndex = (int)currentExperiment;
                elapsedTime = elapsedTimes[elapsedTimeIndex];

                //Reset the research start time.
                cycleStartTime = Planetarium.GetUniversalTime() - elapsedTime;
            }

            CBAttributeMapSO.MapAttribute biome = Utils.GetCurrentBiome(this.part.vessel);
            biomeName = biome.name;

            if (this.part.vessel.situation == Vessel.Situations.LANDED || this.part.vessel.situation == Vessel.Situations.SPLASHED || this.part.vessel.situation == Vessel.Situations.PRELAUNCH)
            {
                planetID    = this.part.vessel.mainBody.flightGlobalsIndex;
                harvestType = (HarvestTypes)harvestID;
            }
        }
コード例 #12
0
ファイル: WBIGeologyLab.cs プロジェクト: PalverZ/Pathfinder
        protected void setupPartModules()
        {
            //GPS
            if (gps == null)
            {
                gps = this.part.FindModuleImplementing<ModuleGPS>();
                gps.Fields["bioName"].guiActive = false;
                gps.Fields["body"].guiActive = false;
                gps.Fields["lat"].guiActive = false;
                gps.Fields["lon"].guiActive = false;
            }

            //Biome Scanner
            if (biomeScanner == null)
            {
                biomeScanner = this.part.FindModuleImplementing<ModuleBiomeScanner>();
                biomeScanner.Events["RunAnalysis"].guiActive = false;
                biomeScanner.Events["RunAnalysis"].guiActiveUnfocused = false;
            }

            //Setup the science container
            if (scienceContainer == null)
            {
                scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();
                scienceContainer = this.part.FindModuleImplementing<ModuleScienceContainer>();
                scienceContainer.Events["ReviewDataEvent"].guiActiveUnfocused = false;
                scienceContainer.Events["ReviewDataEvent"].guiActive = false;

                //Terrain uplink
                terrainUplinkView.part = this.part;
                terrainUplinkView.scienceContainer = scienceContainer;
            }

            //Grab the seismometer (if any)
            foreach (PartModule mod in this.part.Modules)
                if (mod.moduleName == "Seismometer")
                {
                    impactSeismometer = mod;
                    impactSensor = (IScienceDataContainer)impactSeismometer;
                    ScienceData[] impactData = impactSensor.GetData();

                    foreach (ScienceData data in impactData)
                        scienceContainer.AddData(data);
                    foreach (ScienceData doomed in impactData)
                        impactSensor.DumpData(doomed);
                    break;
                }

            //Resource list
            if (resourceList == null)
                resourceList = ResourceMap.Instance.GetResourceItemList(HarvestTypes.Planetary, this.part.vessel.mainBody);
            else if (resourceList.Count == 0)
                resourceList = ResourceMap.Instance.GetResourceItemList(HarvestTypes.Planetary, this.part.vessel.mainBody);
        }