Got the VOID windows and icon behaving acceptably in the editor.
[VOID.git] / VOID_EditorCore.cs
blob:a/VOID_EditorCore.cs -> blob:b/VOID_EditorCore.cs
--- a/VOID_EditorCore.cs
+++ b/VOID_EditorCore.cs
@@ -1,28 +1,37 @@
+// VOID
 //
-//  VOID_EditorCore.cs
+// VOID_EditorCore.cs
 //
-//  Author:
-//       toadicus <>
+// Copyright © 2014, toadicus
+// All rights reserved.
 //
-//  Copyright (c) 2013 toadicus
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
 //
-//  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.
+// 1. Redistributions of source code must retain the above copyright notice,
+//    this list of conditions and the following disclaimer.
 //
-//  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.
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation and/or other
+//    materials provided with the distribution.
 //
-//  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 Engineer.VesselSimulator;
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used
+//    to endorse or promote products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+using KerbalEngineer.VesselSimulator;
 using KSP;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using ToadicusTools;
 using UnityEngine;
 
 namespace VOID
@@ -60,8 +69,17 @@
 			if (_initialized)
 			{
 				_instance.StopGUI();
+				_instance.Dispose();
 				_instance = null;
 				_initialized = false;
+			}
+		}
+
+		protected override ApplicationLauncher.AppScenes appIconVisibleScenes
+		{
+			get
+			{
+				return ApplicationLauncher.AppScenes.VAB | ApplicationLauncher.AppScenes.SPH;
 			}
 		}
 
@@ -70,7 +88,7 @@
 			this._Name = "VOID Editor Core";
 		}
 
-		public new void OnGUI() {}
+		public override void OnGUI() {}
 
 		public override void DrawGUI()
 		{
@@ -79,71 +97,9 @@
 				this.LoadModulesOfType<IVOID_EditorModule>();
 			}
 
-			Rect _mainPos = new Rect (this.mainWindowPos);
+			Rect _iconPos = Tools.DockToWindow (this.VOIDIconPos, this.mainWindowPos);
 
-			Rect _iconPos = new Rect(this.VOIDIconPos);
-			Vector2 _iconCtr = new Vector2 ();
-
-			// HACK: This is really messy.  Clean it up.
-			if (_mainPos.yMax > Screen.height - 30 ||
-			    _mainPos.yMin < 30
-			    )
-			{
-				if (_mainPos.xMax > Screen.width - 30 ||
-				    _mainPos.xMin < 30
-				    )
-				{
-					if (_mainPos.yMax < Screen.height / 2)
-					{
-						_iconCtr.y = _mainPos.yMax + 15;
-					}
-					else
-					{
-						_iconCtr.y = _mainPos.yMin - 15;
-					}
-				}
-				else
-				{
-					if (_mainPos.yMax > Screen.height / 2)
-					{
-						_iconCtr.y = _mainPos.yMax - 15;
-					}
-					else
-					{
-						_iconCtr.y = _mainPos.yMin + 15;
-					}
-				}
-
-				if (_mainPos.center.x < Screen.width / 2)
-				{
-					_iconCtr.x = _mainPos.xMin - 15;
-				}
-				else
-				{
-					_iconCtr.x = _mainPos.xMax + 15;
-				}
-
-			}
-			else
-			{
-				if (_mainPos.xMax > Screen.width - 30)
-				{
-					_iconCtr.x = _mainPos.xMax - 15;
-				}
-				else if (_mainPos.xMin < 30)
-				{
-					_iconCtr.x = _mainPos.xMin + 15;
-				}
-				else
-				{
-					_iconCtr.x = _mainPos.center.x;
-				}
-
-				_iconCtr.y = _mainPos.yMin - 15;
-			}
-
-			_iconCtr = Tools.ClampV2ToScreen (_iconCtr, 15);
-			_iconPos.center = _iconCtr;
+			_iconPos = Tools.ClampRectToEditorPad (_iconPos);
 
 			if (_iconPos != this.VOIDIconPos)
 			{
@@ -153,11 +109,13 @@
 			base.DrawGUI();
 		}
 
-		public new void Update()
+		public override void Update()
 		{
+			this.LoadBeforeUpdate();
+
 			foreach (IVOID_EditorModule module in this.Modules)
 			{
-				if (EditorLogic.startPod == null)
+				if (EditorLogic.RootPart == null)
 				{
 					module.StopGUI();
 					continue;
@@ -170,11 +128,9 @@
 				{
 					module.StopGUI();
 				}
-
-				this.CheckAndSave ();
 			}
 
-			if (EditorLogic.startPod == null || !HighLogic.LoadedSceneIsEditor)
+			if (EditorLogic.RootPart == null || !HighLogic.LoadedSceneIsEditor)
 			{
 				this.StopGUI();
 				return;
@@ -184,14 +140,16 @@
 				this.StartGUI();
 			}
 
-			if (EditorLogic.SortedShipList.Count > 0)
+			if (EditorLogic.SortedShipList.Count > 0 && this.vesselSimActive)
 			{
-				SimManager.Instance.Gravity = 9.08665;
-				SimManager.Instance.TryStartSimulation();
+				Tools.PostDebugMessage(this, "Updating SimManager.");
+				this.UpdateSimManager();
 			}
+
+			this.CheckAndSave ();
 		}
 
-		public new void FixedUpdate() {}
+		public override void FixedUpdate() {}
 	}
 }