Carving a bunch of functionality out into ToadicusTools.
[VOID.git] / VOID_EditorCore.cs
blob:a/VOID_EditorCore.cs -> blob:b/VOID_EditorCore.cs
  // VOID
// //
// VOID_EditorCore.cs // VOID_EditorCore.cs
// //
// Author: // Copyright © 2014, toadicus
// 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 // 1. Redistributions of source code must retain the above copyright notice,
// it under the terms of the GNU General Public License as published by // this list of conditions and the following disclaimer.
// 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, // 2. Redistributions in binary form must reproduce the above copyright notice,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // this list of conditions and the following disclaimer in the documentation and/or other
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // materials provided with the distribution.
// GNU General Public License for more details.  
// //
// You should have received a copy of the GNU General Public License // 3. Neither the name of the copyright holder nor the names of its contributors may be used
// along with this program. If not, see <http://www.gnu.org/licenses/>. // 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 Engineer.VesselSimulator; using KerbalEngineer.VesselSimulator;
using KSP; using KSP;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using ToadicusTools; using ToadicusTools;
using UnityEngine; using UnityEngine;
   
namespace VOID namespace VOID
{ {
public class VOID_EditorCore : VOID_Core public class VOID_EditorCore : VOID_Core
{ {
/* /*
* Static Members * Static Members
* */ * */
protected new static bool _initialized = false; protected new static bool _initialized = false;
public new static bool Initialized public new static bool Initialized
{ {
get get
{ {
return _initialized; return _initialized;
} }
} }
   
protected new static VOID_EditorCore _instance; protected new static VOID_EditorCore _instance;
public new static VOID_EditorCore Instance public new static VOID_EditorCore Instance
{ {
get get
{ {
if (_instance == null) if (_instance == null)
{ {
_instance = new VOID_EditorCore(); _instance = new VOID_EditorCore();
_initialized = true; _initialized = true;
} }
return _instance; return _instance;
} }
} }
   
public new static void Reset() public new static void Reset()
{ {
if (_initialized) if (_initialized)
{ {
_instance.StopGUI(); _instance.StopGUI();
  _instance.Dispose();
_instance = null; _instance = null;
_initialized = false; _initialized = false;
  }
  }
   
  protected override ApplicationLauncher.AppScenes appIconVisibleScenes
  {
  get
  {
  return ApplicationLauncher.AppScenes.VAB | ApplicationLauncher.AppScenes.SPH;
} }
} }
   
public VOID_EditorCore() : base() public VOID_EditorCore() : base()
{ {
this._Name = "VOID Editor Core"; this._Name = "VOID Editor Core";
} }
   
public new void OnGUI() {} public override void OnGUI() {}
   
public override void DrawGUI() public override void DrawGUI()
{ {
if (!this._modulesLoaded) if (!this._modulesLoaded)
{ {
this.LoadModulesOfType<IVOID_EditorModule>(); this.LoadModulesOfType<IVOID_EditorModule>();
} }
   
Rect _iconPos = Tools.DockToWindow (this.VOIDIconPos, this.mainWindowPos); Rect _iconPos = Tools.DockToWindow (this.VOIDIconPos, this.mainWindowPos);
   
_iconPos = Tools.ClampRectToScreen (_iconPos, (int)_iconPos.width, (int)_iconPos.height); _iconPos = Tools.ClampRectToEditorPad (_iconPos);
   
if (_iconPos != this.VOIDIconPos) if (_iconPos != this.VOIDIconPos)
{ {
this.VOIDIconPos = _iconPos; this.VOIDIconPos = _iconPos;
} }
   
base.DrawGUI(); base.DrawGUI();
} }
   
public new void Update() public override void Update()
{ {
  this.LoadBeforeUpdate();
   
foreach (IVOID_EditorModule module in this.Modules) foreach (IVOID_EditorModule module in this.Modules)
{ {
if (EditorLogic.startPod == null) if (EditorLogic.RootPart == null)
{ {
module.StopGUI(); module.StopGUI();
continue; continue;
} }
if (HighLogic.LoadedSceneIsEditor && module.toggleActive && EditorLogic.SortedShipList.Any()) if (HighLogic.LoadedSceneIsEditor && module.toggleActive && EditorLogic.SortedShipList.Any())
{ {
module.StartGUI(); module.StartGUI();
} }
if (!HighLogic.LoadedSceneIsEditor || !module.toggleActive || !EditorLogic.SortedShipList.Any()) if (!HighLogic.LoadedSceneIsEditor || !module.toggleActive || !EditorLogic.SortedShipList.Any())
{ {
module.StopGUI(); module.StopGUI();
} }
} }
   
if (EditorLogic.startPod == null || !HighLogic.LoadedSceneIsEditor) if (EditorLogic.RootPart == null || !HighLogic.LoadedSceneIsEditor)
{ {
this.StopGUI(); this.StopGUI();
return; return;
} }
else if (!this.guiRunning && HighLogic.LoadedSceneIsEditor) else if (!this.guiRunning && HighLogic.LoadedSceneIsEditor)
{ {
this.StartGUI(); this.StartGUI();
} }
   
if (EditorLogic.SortedShipList.Count > 0) if (EditorLogic.SortedShipList.Count > 0 && this.vesselSimActive)
{ {
SimManager.Gravity = VOID_Data.KerbinGee; Tools.PostDebugMessage(this, "Updating SimManager.");
SimManager.TryStartSimulation(); this.UpdateSimManager();
} }
   
this.CheckAndSave (); this.CheckAndSave ();
} }
   
public new void FixedUpdate() {} public override void FixedUpdate() {}
} }
} }