From 2470041639f06fbc1cec7fc38beb6b4856df4a81 Mon Sep 17 00:00:00 2001 From: joal22za Date: Thu, 14 May 2026 17:43:43 +0200 Subject: [PATCH 1/2] Implemented a cumulative summation of dV I added two new columns which sums up the previous stages dV in both Vac and Atmo such that the user doesn't need to manually calculate for example stage 6 to stage 3. --- MechJeb2/MechJebStageStatsHelper.cs | 68 +++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/MechJeb2/MechJebStageStatsHelper.cs b/MechJeb2/MechJebStageStatsHelper.cs index c614fbe8e..7d69ec7a0 100644 --- a/MechJeb2/MechJebStageStatsHelper.cs +++ b/MechJeb2/MechJebStageStatsHelper.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using KSP.Localization; using UnityEngine; @@ -60,7 +60,7 @@ public MechJebStageStatsHelper(MechJebModuleInfoItems items) private enum StageData { KSPStage, InitialMass, FinalMass, StagedMass, BurnedMass, Thrust, VacInitialTWR, VacMaxTWR, AtmoInitialTWR, AtmoMaxTWR, - Isp, AtmoDeltaV, VacDeltaV, Time + Isp, AtmoDeltaV, VacDeltaV, Time, AtmoCumulativeDeltaV, VacCumulativeDeltaV } private static readonly List AllStages = new List @@ -78,6 +78,8 @@ private enum StageData StageData.Isp, StageData.AtmoDeltaV, StageData.VacDeltaV, + StageData.AtmoCumulativeDeltaV, + StageData.VacCumulativeDeltaV, StageData.Time }; @@ -126,8 +128,10 @@ private void InitalizeStageHeaderData() stageHeaderData.Add(StageData.AtmoInitialTWR, CachedLocalizer.Instance.MechJebInfoItemsStatsColumn7 + SPACING); stageHeaderData.Add(StageData.AtmoMaxTWR, CachedLocalizer.Instance.MechJebInfoItemsStatsColumn8 + SPACING); stageHeaderData.Add(StageData.Isp, CachedLocalizer.Instance.MechJebInfoItemsStatsColumn9 + SPACING); - stageHeaderData.Add(StageData.AtmoDeltaV, (showRcs ? "RCS ∆Vmin" : CachedLocalizer.Instance.MechJebInfoItemsStatsColumn10) + SPACING); - stageHeaderData.Add(StageData.VacDeltaV, (showRcs ? "RCS ∆Vmax" : CachedLocalizer.Instance.MechJebInfoItemsStatsColumn11) + SPACING); + stageHeaderData.Add(StageData.AtmoDeltaV, CachedLocalizer.Instance.MechJebInfoItemsStatsColumn10 + SPACING); + stageHeaderData.Add(StageData.VacDeltaV, CachedLocalizer.Instance.MechJebInfoItemsStatsColumn11 + SPACING); + stageHeaderData.Add(StageData.AtmoCumulativeDeltaV, "Σ ∆V Atmo" + SPACING); + stageHeaderData.Add(StageData.VacCumulativeDeltaV, "Σ ∆V Vac" + SPACING); stageHeaderData.Add(StageData.Time, CachedLocalizer.Instance.MechJebInfoItemsStatsColumn12 + SPACING); } @@ -162,12 +166,34 @@ private double _atmoStartTWR(int index, double geeASL) => private double _atmoEndTWR(int index, double geeASL) => showRcs ? stats.AtmoStats[index].RcsMaxTWR(geeASL) : stats.AtmoStats[index].MaxTWR(geeASL); + private double CalculateCumulativeVacDeltaV(List stages, int currentStageIndex) + { + var cumulative = 0.0; + + for (int i = currentStageIndex; i < stages.Count; i++) + cumulative += _vacDv(stages[i]); + + return cumulative; + } + + private double CalculateCumulativeAtmoDeltaV(List stages, int currentStageIndex) + { + var cumulative = 0.0; + + for (int i = currentStageIndex; i < stages.Count; i++) + cumulative += _atmoDv(stages[i]); + + return cumulative; + } + private void UpdateStageDisplayInfo(List stages, double geeASL) { foreach (KeyValuePair> kvp in stageDisplayInfo) kvp.Value.Clear(); foreach (int index in stages) { + var currentStageIndex = stages.IndexOf(index); + stageDisplayInfo[StageData.KSPStage].Add($"{stats.AtmoStats[index].KSPStage} "); if (stageVisibility[StageData.InitialMass]) stageDisplayInfo[StageData.InitialMass].Add($"{stats.AtmoStats[index].StartMass:F3} t "); @@ -186,6 +212,10 @@ private void UpdateStageDisplayInfo(List stages, double geeASL) if (stageVisibility[StageData.Isp]) stageDisplayInfo[StageData.Isp].Add($"{_isp(index):F2} "); if (stageVisibility[StageData.AtmoDeltaV]) stageDisplayInfo[StageData.AtmoDeltaV].Add($"{_atmoDv(index):F0} m/s "); if (stageVisibility[StageData.VacDeltaV]) stageDisplayInfo[StageData.VacDeltaV].Add($"{_vacDv(index):F0} m/s "); + if (stageVisibility[StageData.AtmoCumulativeDeltaV]) + stageDisplayInfo[StageData.AtmoCumulativeDeltaV].Add($"{CalculateCumulativeAtmoDeltaV(stages, currentStageIndex):F0} m/s "); + if (stageVisibility[StageData.VacCumulativeDeltaV]) + stageDisplayInfo[StageData.VacCumulativeDeltaV].Add($"{CalculateCumulativeVacDeltaV(stages, currentStageIndex):F0} m/s "); if (stageVisibility[StageData.Time]) stageDisplayInfo[StageData.Time].Add(timeSeconds ? $"{_deltaTime(index):F2}s " @@ -244,6 +274,8 @@ public void AllStageStats() showRcs = !showRcs; infoItems.showRcs = showRcs; InitalizeStageHeaderData(); + + SetVisibility(StageDisplayState); } if (!HighLogic.LoadedSceneIsEditor) @@ -339,19 +371,21 @@ private bool DrawStageStatsColumn(string header, in List data) private void LoadStageVisibility() { - stageVisibility[StageData.StagedMass] = showStagedMass; - stageVisibility[StageData.BurnedMass] = showBurnedMass; - stageVisibility[StageData.InitialMass] = showInitialMass; - stageVisibility[StageData.FinalMass] = showFinalMass; - stageVisibility[StageData.Thrust] = showThrust; - stageVisibility[StageData.VacInitialTWR] = showVacInitialTWR; - stageVisibility[StageData.AtmoInitialTWR] = showAtmoInitialTWR; - stageVisibility[StageData.AtmoMaxTWR] = showAtmoMaxTWR; - stageVisibility[StageData.VacMaxTWR] = showVacMaxTWR; - stageVisibility[StageData.AtmoDeltaV] = showAtmoDeltaV; - stageVisibility[StageData.VacDeltaV] = showVacDeltaV; - stageVisibility[StageData.Time] = showTime; - stageVisibility[StageData.Isp] = showISP; + stageVisibility[StageData.StagedMass] = showStagedMass; + stageVisibility[StageData.BurnedMass] = showBurnedMass; + stageVisibility[StageData.InitialMass] = showInitialMass; + stageVisibility[StageData.FinalMass] = showFinalMass; + stageVisibility[StageData.Thrust] = showThrust; + stageVisibility[StageData.VacInitialTWR] = showVacInitialTWR; + stageVisibility[StageData.AtmoInitialTWR] = showAtmoInitialTWR; + stageVisibility[StageData.AtmoMaxTWR] = showAtmoMaxTWR; + stageVisibility[StageData.VacMaxTWR] = showVacMaxTWR; + stageVisibility[StageData.AtmoDeltaV] = showAtmoDeltaV; + stageVisibility[StageData.VacDeltaV] = showVacDeltaV; + stageVisibility[StageData.Time] = showTime; + stageVisibility[StageData.Isp] = showISP; + stageVisibility[StageData.AtmoCumulativeDeltaV] = showAtmoDeltaV && !showRcs; + stageVisibility[StageData.VacCumulativeDeltaV] = showVacDeltaV && !showRcs; } private void SaveStageVisibility() From f647c05407dc06a40bfce43b3b840d9386bca0df Mon Sep 17 00:00:00 2001 From: joal22za Date: Thu, 14 May 2026 19:23:19 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Made=20cumulative=20=CE=94V=20columns=20ind?= =?UTF-8?q?ependent=20of=20RCS=20mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MechJeb2/MechJebStageStatsHelper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MechJeb2/MechJebStageStatsHelper.cs b/MechJeb2/MechJebStageStatsHelper.cs index 7d69ec7a0..315f0b1ed 100644 --- a/MechJeb2/MechJebStageStatsHelper.cs +++ b/MechJeb2/MechJebStageStatsHelper.cs @@ -384,8 +384,8 @@ private void LoadStageVisibility() stageVisibility[StageData.VacDeltaV] = showVacDeltaV; stageVisibility[StageData.Time] = showTime; stageVisibility[StageData.Isp] = showISP; - stageVisibility[StageData.AtmoCumulativeDeltaV] = showAtmoDeltaV && !showRcs; - stageVisibility[StageData.VacCumulativeDeltaV] = showVacDeltaV && !showRcs; + stageVisibility[StageData.AtmoCumulativeDeltaV] = showAtmoDeltaV; + stageVisibility[StageData.VacCumulativeDeltaV] = showVacDeltaV; } private void SaveStageVisibility()