--- a/VOID_Module.cs +++ b/VOID_Module.cs @@ -22,6 +22,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; +using UnityEngine; namespace VOID { @@ -31,23 +32,16 @@ * Fields * */ [AVOID_SaveValue("Active")] - protected VOID_SaveValue<bool> _Active = true; + protected VOID_SaveValue<bool> _Active = false; protected bool _Running = false; - protected bool _hasConfigurables = false; protected string _Name; + + protected float lastUpdate = 0; /* * Properties * */ - public virtual bool hasConfigurables - { - get - { - return this._hasConfigurables; - } - } - public virtual bool toggleActive { get @@ -73,6 +67,14 @@ get { return this._Name; + } + } + + public virtual Vessel vessel + { + get + { + return FlightGlobals.ActiveVessel; } } @@ -81,7 +83,7 @@ * */ public void StartGUI() { - if (!this.toggleActive) + if (!this.toggleActive || this.guiRunning) { return; } @@ -93,6 +95,10 @@ public void StopGUI() { + if (!this.guiRunning) + { + return; + } Tools.PostDebugMessage (string.Format("Removing {0} from the draw queue.", this.GetType().Name)); RenderingManager.RemoveFromPostDrawQueue (3, this.DrawGUI); this._Running = false; @@ -110,13 +116,14 @@ foreach (var field in this.GetType().GetFields( BindingFlags.NonPublic | BindingFlags.Public | - BindingFlags.Instance + BindingFlags.Instance | + BindingFlags.FlattenHierarchy )) { object[] attrs = field.GetCustomAttributes(typeof(AVOID_SaveValue), false); if (attrs.Length == 0) { - return; + continue; } AVOID_SaveValue attr = attrs.FirstOrDefault () as AVOID_SaveValue; @@ -126,15 +133,22 @@ object fieldValue = field.GetValue(this); bool convertBack = false; + bool isIntCollection = false; if (fieldValue is IVOID_SaveValue) { + if (fieldValue is IntCollection) { + isIntCollection = true; + } fieldValue = (fieldValue as IVOID_SaveValue).AsType; convertBack = true; } fieldValue = config.GetValue(fieldName, fieldValue); - if (convertBack) + if (isIntCollection) { + fieldValue = new IntCollection (4, (long)fieldValue); + } + else if (convertBack) { Type type = typeof(VOID_SaveValue<>).MakeGenericType (fieldValue.GetType ()); IVOID_SaveValue convertValue = Activator.CreateInstance (type) as IVOID_SaveValue; @@ -148,26 +162,19 @@ } } - public virtual void SaveConfig() - { - if (!VOID_Core.Instance.configDirty) - { - return; - } - - var config = KSP.IO.PluginConfiguration.CreateForType<VOID_Core> (); - config.load (); - + public virtual void _SaveToConfig(KSP.IO.PluginConfiguration config) + { foreach (var field in this.GetType().GetFields( + BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | - BindingFlags.Instance + BindingFlags.FlattenHierarchy )) { object[] attrs = field.GetCustomAttributes(typeof(AVOID_SaveValue), false); if (attrs.Length == 0) { - return; + continue; } AVOID_SaveValue attr = attrs.FirstOrDefault () as AVOID_SaveValue; @@ -185,8 +192,38 @@ Tools.PostDebugMessage(string.Format("{0}: Saved field {1}.", this.GetType().Name, fieldName)); } - - config.save (); + } + } + + public abstract class VOID_WindowModule : VOID_Module + { + [AVOID_SaveValue("WindowPos")] + protected Rect WindowPos = new Rect(Screen.width / 2, Screen.height / 2, 250f, 50f); + protected float defWidth = 250f; + protected float defHeight = 50f; + + public abstract void ModuleWindow(int _); + + public override void DrawGUI() + { + Rect _Pos = this.WindowPos; + + _Pos = GUILayout.Window( + VOID_Core.Instance.windowID, + _Pos, + this.ModuleWindow, + this.Name, + GUILayout.Width(this.defWidth), + GUILayout.Height(this.defHeight) + ); + + _Pos = Tools.ClampRectToScreen (_Pos); + + if (_Pos != this.WindowPos) + { + this.WindowPos = _Pos; + VOID_Core.Instance.configDirty = true; + } } } }