Got the EditorHUD working, and it's not even that ugly! Need to finalize what we want, and get a config window available.
[VOID.git] / VOID_EditorHUD.cs
blob:a/VOID_EditorHUD.cs -> blob:b/VOID_EditorHUD.cs
--- a/VOID_EditorHUD.cs
+++ b/VOID_EditorHUD.cs
@@ -24,6 +24,8 @@
 using KSP;
 using System;
 using System.Collections.Generic;
+using System.Linq;
+using System.Text;
 using UnityEngine;
 
 namespace VOID
@@ -40,6 +42,8 @@
 
 		protected GUIStyle labelStyle;
 
+		protected EditorVesselOverlays _vesselOverlays;
+
 		/*
 		 * Properties
 		 * */
@@ -61,6 +65,47 @@
 			}
 		}
 
+		protected EditorVesselOverlays vesselOverlays
+		{
+			get
+			{
+				if (this._vesselOverlays == null)
+				{
+					this._vesselOverlays = (EditorVesselOverlays)Resources
+						.FindObjectsOfTypeAll(typeof(EditorVesselOverlays))
+						.FirstOrDefault();
+				}
+
+				return this._vesselOverlays;
+			}
+		}
+
+		protected EditorMarker_CoM CoMmarker
+		{
+			get
+			{
+				if (this.vesselOverlays == null)
+				{
+					return null;
+				}
+
+				return this.vesselOverlays.CoMmarker;
+			}
+		}
+
+		protected EditorMarker_CoT CoTmarker
+		{
+			get
+			{
+				if (this.vesselOverlays == null)
+				{
+					return null;
+				}
+
+				return this.vesselOverlays.CoTmarker;
+			}
+		}
+
 		/* 
 		 * Methods
 		 * */
@@ -68,7 +113,7 @@
 		{
 			this._Name = "Heads-Up Display";
 
-			this._Active = true;
+			this._Active.value = true;
 
 			this.textColors.Add(Color.green);
 			this.textColors.Add(Color.black);
@@ -81,7 +126,7 @@
 			this.textColors.Add(Color.magenta);
 
 			this.labelStyle = new GUIStyle ();
-			this.labelStyle.alignment = TextAnchor.UpperRight;
+			// this.labelStyle.alignment = TextAnchor.UpperRight;
 			this.labelStyle.normal.textColor = this.textColors [this.ColorIndex];
 
 			Tools.PostDebugMessage (this.GetType().Name + ": Constructed.");
@@ -96,17 +141,71 @@
 				return;
 			}
 
+			float hudLeft;
+			StringBuilder hudString;
+
+			if (EditorLogic.fetch.editorScreen == EditorLogic.EditorScreen.Parts)
+			{
+				hudLeft = EditorPanels.Instance.partsPanelWidth + 10;
+			}
+			else if (EditorLogic.fetch.editorScreen == EditorLogic.EditorScreen.Actions)
+			{
+				hudLeft = EditorPanels.Instance.actionsPanelWidth + 10;
+			}
+			else
+			{
+				return;
+			}
+
+			Rect hudPos = new Rect (hudLeft, 48, 300, 32);
+
+			hudString = new StringBuilder();
+
 			// GUI.skin = AssetBase.GetGUISkin("KSP window 2");
 
 			labelStyle.normal.textColor = textColors [ColorIndex];
 
+			hudString.Append("Total Mass: ");
+			hudString.Append(SimManager.Instance.LastStage.totalMass.ToString("F3"));
+			hudString.Append('t');
+
+			hudString.Append(' ');
+
+			hudString.Append("Part Count: ");
+			hudString.Append(EditorLogic.SortedShipList.Count);
+
+			hudString.Append('\n');
+
+			hudString.Append("Total Delta-V: ");
+			hudString.Append(Tools.MuMech_ToSI(SimManager.Instance.LastStage.totalDeltaV));
+			hudString.Append("m/s");
+
+			hudString.Append('\n');
+
+			hudString.Append("Bottom Stage Delta-V");
+			hudString.Append(Tools.MuMech_ToSI(SimManager.Instance.LastStage.deltaV));
+			hudString.Append("m/s");
+
+			hudString.Append('\n');
+
+			hudString.Append("Bottom Stage T/W Ratio: ");
+			hudString.Append(SimManager.Instance.LastStage.thrustToWeight.ToString("F3"));
+
+			if (this.CoMmarker.gameObject.activeInHierarchy && this.CoTmarker.gameObject.activeInHierarchy)
+			{
+				hudString.Append('\n');
+
+				hudString.Append("Thrust Offset: ");
+				hudString.Append(
+					Vector3.Cross(
+						this.CoTmarker.dirMarkerObject.transform.forward,
+						this.CoMmarker.posMarkerObject.transform.position - this.CoTmarker.posMarkerObject.transform.position
+					).ToString("F3"));
+			}
+
 			GUI.Label (
-				new Rect (Screen.width - 310, 80, 300f, 32f),
-				"Total Mass: " + SimManager.Instance.LastStage.totalMass.ToString("F3") + "t" +
-				" Part Count: " + EditorLogic.SortedShipList.Count +
-				"\nTotal Delta-V: " + Tools.MuMech_ToSI(SimManager.Instance.LastStage.totalDeltaV) + "m/s" +
-				"\nBottom Stage Delta-V: " + Tools.MuMech_ToSI(SimManager.Instance.LastStage.deltaV) + "m/s" +
-				"\nBottom Stage T/W Ratio: " + SimManager.Instance.LastStage.thrustToWeight.ToString("F3"),
+				hudPos,
+				hudString.ToString(),
 				labelStyle);
 		}