New StageInfo module for more detailed engineering information.
New StageInfo module for more detailed engineering information.

--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -39,7 +39,7 @@
 // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
 // The form "{Major}.{Minor}.*" will automatically update the build and revision,
 // and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion("0.14.2.*")]
+[assembly: AssemblyVersion("0.14.3.*")]
 // The following attributes are used to specify the signing key for the assembly,
 // if desired. See the Mono documentation for more information about signing.
 //[assembly: AssemblyDelaySign(false)]

--- a/VOID.csproj
+++ b/VOID.csproj
@@ -97,6 +97,7 @@
     <Compile Include="VOID_HUDAdvanced.cs" />
     <Compile Include="VOID_TWR.cs" />
     <Compile Include="VOID_CareerStatus.cs" />
+    <Compile Include="VOID_StageInfo.cs" />
   </ItemGroup>
   <ProjectExtensions>
     <MonoDevelop>

--- a/VOID_DataLogger.cs
+++ b/VOID_DataLogger.cs
@@ -229,6 +229,7 @@
 					"Temperature (°C);" +
 					"Gravity (m/s²);" +
 					"Atmosphere Density (g/m³);" +
+					"Downrange Distance  (m);" +
 					"\n"
 				);
 			}
@@ -289,6 +290,10 @@
 			line.Append((vessel.atmDensity * 1000).ToString("F3"));
 			line.Append(';');
 
+			// Downrange Distance
+			line.Append((VOID_Data.downrangeDistance.Value.ToString("G3")));
+			line.Append(';');
+
 			line.Append('\n');
 
 			csvList.Add(line.ToString());

--- a/VOID_HUD.cs
+++ b/VOID_HUD.cs
@@ -239,7 +239,7 @@
 			this.leftHUDPos.value = GUI.Window(
 				this.core.windowID,
 				this.leftHUDPos,
-				this.leftHUDWindow,
+				VOID_Tools.GetWindowHandler(this.leftHUDWindow),
 				GUIContent.none,
 				GUIStyle.none
 			);
@@ -247,7 +247,7 @@
 			this.rightHUDPos.value = GUI.Window(
 				this.core.windowID,
 				this.rightHUDPos,
-				this.rightHUDWindow,
+				VOID_Tools.GetWindowHandler(this.rightHUDWindow),
 				GUIContent.none,
 				GUIStyle.none
 			);
@@ -289,7 +289,10 @@
 			"Downrange Distance",
 			delegate() {
 
-			if (core.vessel.mainBody != Planetarium.fetch.Home)
+			if (core.vessel == null ||
+				Planetarium.fetch == null ||
+				core.vessel.mainBody != Planetarium.fetch.Home
+			)
 			{
 				return double.NaN;
 			}

file:b/VOID_StageInfo.cs (new)
--- /dev/null
+++ b/VOID_StageInfo.cs
@@ -1,1 +1,95 @@
+// VOID © 2014 toadicus
+//
+// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. To view a
+// copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/
 
+using Engineer.VesselSimulator;
+using KSP;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using ToadicusTools;
+using UnityEngine;
+
+namespace VOID
+{
+	public class VOID_StageInfo : VOID_WindowModule
+	{
+		private Table stageTable;
+
+		private Table.Column<int> stageNumberCol;
+		private Table.Column<double> stageDeltaVCol;
+		private Table.Column<double> stageMassCol;
+
+		private bool stylesApplied;
+
+		public VOID_StageInfo() : base()
+		{
+			this._Name = "Stage Information";
+
+			this.stylesApplied = false;
+
+			this.stageTable = new Table();
+
+			this.stageNumberCol = new Table.Column<int>(40f);
+			this.stageTable.Add(this.stageNumberCol);
+
+			this.stageDeltaVCol = new Table.Column<double>(80f);
+			this.stageDeltaVCol.Format = "S2";
+			this.stageTable.Add(this.stageDeltaVCol);
+
+			this.stageMassCol = new Table.Column<double>(80f);
+			this.stageMassCol.Format = "G2";
+			this.stageTable.Add(this.stageMassCol);
+		}
+
+		public override void ModuleWindow(int _)
+		{
+			if (
+				HighLogic.LoadedSceneIsEditor ||
+				(TimeWarp.WarpMode == TimeWarp.Modes.LOW) ||
+				(TimeWarp.CurrentRate <= TimeWarp.MaxPhysicsRate)
+			)
+			{
+				Engineer.VesselSimulator.SimManager.RequestSimulation();
+			}
+
+			if (!this.stylesApplied)
+			{
+				this.stageNumberCol.Style = core.LabelStyles["center"];
+				this.stageDeltaVCol.Style = core.LabelStyles["center"];
+				this.stageMassCol.Style = core.LabelStyles["center"];
+			}
+
+			this.stageTable.ClearColumns();
+
+			if (core.Stages == null || core.Stages.Length == 0)
+			{
+				GUILayout.BeginVertical();
+
+				GUILayout.Label("No stage data!");
+
+				GUILayout.EndVertical();
+
+				return;
+			}
+
+			foreach (Stage stage in core.Stages)
+			{
+				this.stageNumberCol.Add(stage.number);
+
+				this.stageDeltaVCol.Add(stage.deltaV);
+
+				this.stageMassCol.Add(stage.mass);
+			}
+
+			this.stageTable.Render();
+
+			GUI.DragWindow();
+		}
+	}
+
+	public class VOID_StageInfoEditor : VOID_StageInfo, IVOID_EditorModule {}
+}
+
+

--- a/VOID_SurfAtmo.cs
+++ b/VOID_SurfAtmo.cs
@@ -65,6 +65,9 @@
 			this.precisionValues [idx]= (ushort)VOID_Data.terrainElevation.DoGUIHorizontal (this.precisionValues [idx]);
 			idx++;
 
+			this.precisionValues[idx] = (ushort)VOID_Data.downrangeDistance.DoGUIHorizontal(this.precisionValues[idx]);
+			idx++;
+
 			this.precisionValues [idx]= (ushort)VOID_Data.surfVelocity.DoGUIHorizontal (this.precisionValues [idx]);
 			idx++;
 
@@ -76,7 +79,8 @@
 
 			VOID_Data.temperature.DoGUIHorizontal ("F2");
 
-			VOID_Data.atmDensity.DoGUIHorizontal (3);
+			this.precisionValues [idx]= (ushort)VOID_Data.atmDensity.DoGUIHorizontal (this.precisionValues [idx]);
+			idx++;
 
 			VOID_Data.atmPressure.DoGUIHorizontal ("F2");