Revert "Enabled MSBuild engine because of reasons."
Revert "Enabled MSBuild engine because of reasons."

This reverts commit 77b222961f5c923fb1e31e04c3f1ed504831c46e.

--- 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.11.0.*")]
+[assembly: AssemblyVersion("0.12.0.*")]
 // 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
@@ -9,6 +9,7 @@
     <RootNamespace>VOID</RootNamespace>
     <AssemblyName>VOID</AssemblyName>
     <CodePage>65001</CodePage>
+    <UseMSBuildEngine>False</UseMSBuildEngine>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
     <ReleaseVersion>0.11</ReleaseVersion>

--- a/VOID_Core.cs
+++ b/VOID_Core.cs
@@ -81,7 +81,7 @@
 		 * Fields
 		 * */
 		protected string VoidName = "VOID";
-		protected string VoidVersion = "0.11.0";
+		protected string VoidVersion;
 
 		protected bool _factoryReset = false;
 
@@ -992,6 +992,10 @@
 		{
 			this._Name = "VOID Core";
 
+			System.Version version = this.GetType().Assembly.GetName().Version;
+
+			this.VoidVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.MajorRevision);
+
 			this._Active.value = true;
 
 			this._skinName = this.defaultSkin;

--- a/VOID_HUDAdvanced.cs
+++ b/VOID_HUDAdvanced.cs
@@ -134,7 +134,7 @@
 					VOID_Data.vesselAngularVelocity.ToSIString(2)
 				);
 
-				if (VOID_Data.stageNominalThrust != 0)
+				if (VOID_Data.stageNominalThrust != 0d)
 				{
 					leftHUD.AppendFormat(
 						string.Intern("Thrust Offset: {0}\n"),
@@ -239,7 +239,7 @@
 				this.leftHUDPos.value = GUI.Window(
 					VOID_Core.Instance.windowID,
 					this.leftHUDPos,
-					this.leftHUDWindow,
+					VOID_Tools.GetWindowHandler(this.leftHUDWindow),
 					GUIContent.none,
 					GUIStyle.none
 				);
@@ -249,7 +249,7 @@
 					this.rightHUDPos.value = GUI.Window(
 						VOID_Core.Instance.windowID,
 						this.rightHUDPos,
-						this.rightHUDWindow,
+						VOID_Tools.GetWindowHandler(this.rightHUDWindow),
 						GUIContent.none,
 						GUIStyle.none
 					);

--- a/VOID_Module.cs
+++ b/VOID_Module.cs
@@ -214,42 +214,7 @@
 		protected float defWidth = 250f;
 		protected float defHeight = 50f;
 
-		public virtual void ModuleWindow(int _)
-		{
-//			if (VOID_Core.Instance.updateTimer - this.lastUpdate > VOID_Core.Instance.updatePeriod) {
-//				foreach (var fieldinfo in this.GetType().GetFields(
-//					BindingFlags.Instance |
-//					BindingFlags.NonPublic |
-//					BindingFlags.Public |
-//					BindingFlags.FlattenHierarchy
-//				))
-//				{
-//					object field = null;
-//
-//					try
-//					{
-//						field = fieldinfo.GetValue (this);
-//					}
-//					catch (NullReferenceException) {
-//						Tools.PostDebugMessage(string.Format(
-//							"{0}: caught NullReferenceException, could not get value for field {1}.",
-//							this.GetType().Name,
-//							fieldinfo.Name
-//						));
-//					}
-//
-//					if (field == null) {
-//						continue;
-//					}
-//
-//					if (typeof(IVOID_DataValue).IsAssignableFrom (field.GetType ())) {
-//						(field as IVOID_DataValue).Refresh ();
-//					}
-//				}
-//
-//				this.lastUpdate = VOID_Core.Instance.updateTimer;
-//			}
-		}
+		public abstract void ModuleWindow(int _);
 
 		public override void DrawGUI()
 		{

--- a/VOID_Orbital.cs
+++ b/VOID_Orbital.cs
@@ -52,8 +52,6 @@
 
 		public override void ModuleWindow(int _)
 		{
-			base.ModuleWindow (_);
-
 			int idx = 0;
 
             GUILayout.BeginVertical();

--- a/VOID_SurfAtmo.cs
+++ b/VOID_SurfAtmo.cs
@@ -49,8 +49,6 @@
 
 		public override void ModuleWindow(int _)
 		{
-			base.ModuleWindow (_);
-
 			int idx = 0;
 
 			GUILayout.BeginVertical();

--- a/VOID_Tools.cs
+++ b/VOID_Tools.cs
@@ -28,6 +28,7 @@
 
 using KSP;
 using System;
+using System.Collections.Generic;
 using UnityEngine;
 
 namespace VOID
@@ -256,6 +257,39 @@
 		}
 		#endregion
 
+		private static Dictionary<int, GUI.WindowFunction> functionCache;
+		public static UnityEngine.GUI.WindowFunction GetWindowHandler(Action<int> func)
+		{
+			if (functionCache == null)
+			{
+				functionCache = new Dictionary<int, GUI.WindowFunction>();
+			}
+
+			int hashCode = func.GetHashCode();
+
+			if (!functionCache.ContainsKey(hashCode))
+			{
+				functionCache[hashCode] = delegate (int id)
+				{
+					try
+					{
+						func(id);
+					}
+					catch (ArgumentException ex)
+					{
+						Debug.LogWarning(
+							string.Format("[{0}]: ArgumentException caught during window call.", func.Target.GetType().Name)
+						);
+						#if DEBUG
+						Debug.LogException(ex);
+						#endif
+					}
+				};
+			}
+
+			return functionCache[hashCode];
+		}
+
 		/// <summary>
 		/// Converts the interval given in seconds to a human-friendly
 		/// time period in [years], [days], hours, minutes, and seconds.

--- a/VOID_VesselInfo.cs
+++ b/VOID_VesselInfo.cs
@@ -48,8 +48,6 @@
 
 		public override void ModuleWindow(int _)
 		{
-			base.ModuleWindow (_);
-
 			if ((TimeWarp.WarpMode == TimeWarp.Modes.LOW) || (TimeWarp.CurrentRate <= TimeWarp.MaxPhysicsRate))
 			{
 				SimManager.RequestSimulation();