First pass implementation of an Editor side. It works, but the styles are HEINOUS.
First pass implementation of an Editor side. It works, but the styles are HEINOUS.

--- a/IVOID_Module.cs
+++ b/IVOID_Module.cs
@@ -39,12 +39,12 @@
 		void _SaveToConfig(KSP.IO.PluginConfiguration config);
 	}
 
-	
-
 	public interface IVOID_BehaviorModule : IVOID_Module
 	{
 		void Update();
 		void FixedUpdate();
 	}
+
+	public interface IVOID_EditorModule : IVOID_Module {}
 }
 

--- a/VOID.csproj
+++ b/VOID.csproj
@@ -51,6 +51,8 @@
     <Compile Include="VOID_Rendezvous.cs" />
     <Compile Include="VOID_VesselRegister.cs" />
     <Compile Include="VOID_DataLogger.cs" />
+    <Compile Include="VOID_EditorCore.cs" />
+    <Compile Include="VOID_EditorHUD.cs" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="Assembly-CSharp">

--- a/VOIDFlightMaster.cs
+++ b/VOIDFlightMaster.cs
@@ -85,5 +85,52 @@
 			this.Core.FixedUpdate ();
 		}
     }
+
+	[KSPAddon(KSPAddon.Startup.EditorAny, false)]
+	public class VOIDEditorMaster : MonoBehaviour
+	{
+		protected VOID_EditorCore Core;
+
+		public void Awake()
+		{
+			Tools.PostDebugMessage ("VOIDEditorMaster: Waking up.");
+			this.Core = VOID_EditorCore.Instance;
+			this.Core.StartGUI ();
+			Tools.PostDebugMessage ("VOIDEditorMaster: Awake.");
+		}
+
+		public void Update()
+		{
+			if (this.Core == null)
+			{
+				this.Awake();
+			}
+
+			this.Core.Update ();
+
+			if (this.Core.vessel != null)
+			{
+				SimManager.Instance.Gravity = this.Core.vessel.mainBody.gravParameter / Math.Pow(this.Core.vessel.mainBody.Radius, 2);
+				SimManager.Instance.TryStartSimulation();
+			}
+
+			if (this.Core.factoryReset)
+			{
+				KSP.IO.File.Delete<VOID_EditorCore>("config.xml");
+				this.Core = null;
+				VOID_EditorCore.Reset();
+			}
+		}
+
+		public void FixedUpdate()
+		{
+			if (this.Core == null)
+			{
+				return;
+			}
+
+			this.Core.FixedUpdate ();
+		}
+	}
 }
 

--- a/VOID_Core.cs
+++ b/VOID_Core.cs
@@ -228,12 +228,12 @@
 			this.LoadConfig ();
 		}
 
-		protected void LoadModules()
+		protected void LoadModulesOfType<T>()
 		{
 			var types = AssemblyLoader.loadedAssemblies
 				.Select (a => a.assembly.GetExportedTypes ())
 					.SelectMany (t => t)
-					.Where (v => typeof(IVOID_Module).IsAssignableFrom (v)
+					.Where (v => typeof(T).IsAssignableFrom (v)
 					        && !(v.IsInterface || v.IsAbstract) &&
 					        !typeof(VOID_Core).IsAssignableFrom (v)
 					        );
@@ -256,7 +256,11 @@
 
 			this._modulesLoaded = true;
 
-			Tools.PostDebugMessage (string.Format ("VOID_Core: Loaded {0} modules.", this.Modules.Count));
+			Tools.PostDebugMessage(string.Format(
+				"{0}: Loaded {1} modules.",
+				this.GetType().Name,
+				this.Modules.Count
+			));
 		}
 
 		protected void LoadModule(Type T)
@@ -510,7 +514,7 @@
 		{
 			if (!this._modulesLoaded)
 			{
-				this.LoadModules ();
+				this.LoadModulesOfType<IVOID_Module> ();
 			}
 
 			this._windowID = this.windowBaseID;

--- /dev/null
+++ b/VOID_EditorCore.cs
@@ -1,1 +1,96 @@
+//
+//  VOID_EditorCore.cs
+//
+//  Author:
+//       toadicus <>
+//
+//  Copyright (c) 2013 toadicus
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+using KSP;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
 
+namespace VOID
+{
+	public class VOID_EditorCore : VOID_Core
+	{
+		/*
+		 * Static Members
+		 * */
+		protected new static bool _initialized = false;
+		public new static bool Initialized
+		{
+			get 
+			{
+				return _initialized;
+			}
+		}
+
+		protected new static VOID_EditorCore _instance;
+		public new static VOID_EditorCore Instance
+		{
+			get
+			{
+				if (_instance == null)
+				{
+					_instance = new VOID_EditorCore();
+					_initialized = true;
+				}
+				return _instance;
+			}
+		}
+
+		public new static void Reset()
+		{
+			_instance.StopGUI();
+			_instance = null;
+			_initialized = false;
+		}
+
+		public VOID_EditorCore() : base()
+		{
+			this._Name = "VOID Editor Core";
+		}
+
+		public override void DrawGUI()
+		{
+			if (!this._modulesLoaded)
+			{
+				this.LoadModulesOfType<IVOID_EditorModule>();
+			}
+		}
+
+		public new void Update()
+		{
+			foreach (IVOID_EditorModule module in this.Modules)
+			{
+				if (HighLogic.LoadedSceneIsEditor && module.toggleActive)
+				{
+					module.StartGUI();
+				}
+				if (!HighLogic.LoadedSceneIsEditor || !module.toggleActive)
+				{
+					module.StopGUI();
+				}
+			}
+		}
+
+		public new void FixedUpdate() {}
+	}
+}
+
+

file:b/VOID_EditorHUD.cs (new)
--- /dev/null
+++ b/VOID_EditorHUD.cs
@@ -1,1 +1,109 @@
+//
+//  VOID_Hud.cs
+//
+//  Author:
+//       toadicus <>
+//
+//  Copyright (c) 2013 toadicus
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
 
+using KSP;
+using UnityEngine;
+using System;
+using System.Collections.Generic;
+
+namespace VOID
+{
+	public class VOID_EditorHUD : VOID_Module, IVOID_EditorModule
+	{
+		/*
+		 * Fields
+		 * */
+		[AVOID_SaveValue("colorIndex")]
+		protected VOID_SaveValue<int> _colorIndex = 0;
+
+		protected List<Color> textColors = new List<Color>();
+
+		protected GUIStyle labelStyle;
+
+		/*
+		 * Properties
+		 * */
+		public int ColorIndex
+		{
+			get
+			{
+				return this._colorIndex;
+			}
+			set
+			{
+				if (this._colorIndex >= this.textColors.Count - 1)
+				{
+					this._colorIndex = 0;
+					return;
+				}
+
+				this._colorIndex = value;
+			}
+		}
+
+		/* 
+		 * Methods
+		 * */
+		public VOID_EditorHUD() : base()
+		{
+			this._Name = "Heads-Up Display";
+
+			this._Active = true;
+
+			this.textColors.Add(Color.green);
+			this.textColors.Add(Color.black);
+			this.textColors.Add(Color.white);
+			this.textColors.Add(Color.red);
+			this.textColors.Add(Color.blue);
+			this.textColors.Add(Color.yellow);
+			this.textColors.Add(Color.gray);
+			this.textColors.Add(Color.cyan);
+			this.textColors.Add(Color.magenta);
+
+			this.labelStyle = new GUIStyle ();
+			this.labelStyle.normal.textColor = this.textColors [this.ColorIndex];
+
+			Tools.PostDebugMessage (this.GetType().Name + ": Constructed.");
+		}
+
+		public override void DrawGUI()
+		{
+			GUI.skin = AssetBase.GetGUISkin("KSP window 2");
+
+			labelStyle.normal.textColor = textColors [ColorIndex];
+
+			GUI.Label (
+				new Rect (Screen.width - 310, 80, 300f, 90f),
+				"Sample HUD Line 1\nSample HUD Line 2\nSample HUD Line 3\nSample HUD Line 4\n",
+				labelStyle);
+		}
+
+		public override void DrawConfigurables()
+		{
+			if (GUILayout.Button ("Change HUD color", GUILayout.ExpandWidth (false)))
+			{
+				++this.ColorIndex;
+			}
+		}
+	}
+}
+