示例#1
0
        internal void FinalizeExperiment()
        {
            Log.Info("FinalizeExperiment");

            ScienceExperiment labExp = ResearchAndDevelopment.GetExperiment(activeExperiment.activeExpid);


            string displayBiome = "";

            if (vessel.landedAt != string.Empty)
            {
                activeExperiment.biomeSit = Vessel.GetLandedAtString(vessel.landedAt);
                displayBiome = Localizer.Format(vessel.displaylandedAt);
            }
            else
            {
                activeExperiment.biomeSit = ScienceUtil.GetExperimentBiome(vessel.mainBody, vessel.latitude, vessel.longitude);
                displayBiome = ScienceUtil.GetBiomedisplayName(vessel.mainBody, activeExperiment.biomeSit);

                activeExperiment.biomeSit = "";
                displayBiome = "";
            }

            ModuleScienceExperiment exp = activeExperiment.mse;

#if DEBUG
            var step = "Get Subject";
#endif
            ScienceSubject labSub = ResearchAndDevelopment.GetExperimentSubject(labExp, activeExperiment.expSit, vessel.mainBody, activeExperiment.biomeSit, displayBiome);
            //labSub.title = $"{labExp.experimentTitle}";
            if (activeExperiment.biomeSit != "")
            {
                labSub.title = ScienceUtil.GenerateScienceSubjectTitle(labExp, activeExperiment.expSit, vessel.mainBody, activeExperiment.biomeSit, displayBiome);
            }
            else
            {
                labSub.title = ScienceUtil.GenerateScienceSubjectTitle(labExp, activeExperiment.expSit, vessel.mainBody);
            }


            //labSub.subjectValue *= labBoostScalar;
            labSub.scienceCap = labExp.scienceCap * labSub.subjectValue;

#if DEBUG
            step = "Calculate Points";
#endif
            float sciencePoints = labExp.baseValue * labExp.dataScale;

            ScienceData labData = new ScienceData(sciencePoints, exp.xmitDataScalar, 0, labSub.id, labSub.title, false, vessel.rootPart.flightID);

#if DEBUG
            step = "Add Experiment";
#endif
            _storedData.Add(labData);

#if DEBUG
            step = "Show Dialog";
#endif
            Utils.DisplayScreenMsg(Localizer.Format("#autoLOC_238419", vessel.rootPart.partInfo.title, labData.dataAmount, labSub.title));
            ReviewDataItem(labData);

            expStatuses.Remove(activeExperiment.Key);
            activeExperiment = null;
            labData          = null;
        }
示例#2
0
        private void StartExperiment()
        {
            if (clickToDel && Planetarium.GetUniversalTime() - clicktoDelTime > 5)
            {
                clickToDel = false;
            }
            try
            {
                ExperimentSituations vesselSit = ScienceUtil.GetExperimentSituation(FlightGlobals.ActiveVessel);
                string result = "";
                switch (vesselSit)
                {
                case ExperimentSituations.InSpaceHigh:
                    result = Localizer.Format("In space high over <<1>>", FlightGlobals.ActiveVessel.mainBody.displayName);
                    break;

                case ExperimentSituations.InSpaceLow:
                    result = Localizer.Format("In space near <<1>>", FlightGlobals.ActiveVessel.mainBody.displayName);
                    break;
                }
                GUILayout.Label("Situation: " + result);
                exitWarpWhenDone = GUILayout.Toggle((bool)exitWarpWhenDone, "Stop Warp when completed");

                GUILayout.Space(height);
                foreach (Experiment e in Addon.experiments.Values)
                {
                    double percent = 0;
                    if (_labExp.activeExperiment != null)
                    {
                        if (_labExp.activeExperiment.Key != null &&
                            _labExp.expStatuses.ContainsKey(_labExp.activeExperiment.Key) &&
                            _labExp.expStatuses[_labExp.activeExperiment.Key].active &&
                            _labExp.expStatuses[_labExp.activeExperiment.Key].expId == e.name)
                        {
                            percent = 0.001 + _labExp.expStatuses[_labExp.activeExperiment.Key].processedResource / Addon.experiments[_labExp.activeExperiment.activeExpid].resourceAmtRequired * 100;
                            if (percent < 100f)
                            {
                                if (clickToDel)
                                {
                                    _guiLabel = new GUIContent("Click to Cancel: " + e.label + " - " + percent.ToString("F2") + " % completed", e.tooltip);
                                }
                                else
                                {
                                    _guiLabel = new GUIContent(e.label + " - " + percent.ToString("F2") + " % completed", e.tooltip);
                                }
                            }
                            else
                            {
                                _guiLabel = new GUIContent(e.label + " - Completed, Click to Finalize", e.tooltip);
                            }
                            GUI.enabled = true;
                        }
                        else
                        {
                            _guiLabel   = new GUIContent(e.label, e.tooltip);
                            GUI.enabled = false;
                        }
                    }
                    else
                    {
                        ScienceExperiment experiment = ResearchAndDevelopment.GetExperiment(e.name);
                        string            title      = ScienceUtil.GenerateScienceSubjectTitle(experiment, vesselSit, FlightGlobals.ActiveVessel.mainBody);
                        _guiLabel = new GUIContent(e.label, e.tooltip);

                        //var key1 = e.name + "@" + FlightGlobals.ActiveVessel.mainBody.name + vesselSit.ToString();

                        //var m = ResearchAndDevelopment.GetResults(key1);
                        //if (m == null) m = "(null)";
                        //Log.Info("Experiment.Key: " + key1 + ",  result: " + m);

                        ScienceSubject subject = ResearchAndDevelopment.GetExperimentSubject(experiment, vesselSit,
                                                                                             FlightGlobals.ActiveVessel.mainBody, null, null);
#if false
                        float maxScience, availScience;
                        Debug.Log("WindowSkylab, subject: " + subject.id);
                        Debug.Log("key1: " + key1);
                        Debug.Log("WindowSkylab, checkExperiment: " +
                                  checkExperiment(e.name, experiment.id, vesselSit, FlightGlobals.ActiveVessel.mainBody, "", out maxScience, out availScience));
                        Debug.Log("maxScience: " + maxScience + ", availScience: " + availScience);
#endif
                    }
                    if (GUILayout.Button(_guiLabel, GUILayout.Height(height)))
                    {
                        if (percent == 0)
                        {
                            _labExp.DoScience(e.name);
                        }
                        else
                        {
                            if (percent < 100)
                            {
                                if (clickToDel)
                                {
                                    _labExp.expStatuses.Remove(_labExp.activeExperiment.Key);
                                    _labExp.activeExperiment = null;
                                    clickToDel = false;
                                }
                                else
                                {
                                    clickToDel     = true;
                                    clicktoDelTime = Planetarium.GetUniversalTime();
                                }
                            }
                            else
                            {
                                _labExp.FinalizeExperiment();
                            }
                        }
                    }
                    GUI.enabled = true;
                }
            }
            catch (Exception ex)
            {
                Log.Error($"WindowSkylab.DisplayExperiments. Error: {ex.Message}\r\n\r\n{ex.StackTrace}");
            }
        }