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; }
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}"); } }