From: Andy Date: Fri, 08 Nov 2013 23:45:17 +0000 Subject: Reverted changes to VOID_Core.cs so we can find the bad one. X-Git-Tag: 0.9.9 X-Git-Url: http://git.toad.homelinux.net/projects/VOID.git/commitdiff/dd139b4 --- Reverted changes to VOID_Core.cs so we can find the bad one. --- --- a/AVOID_ConfigValue.cs +++ /dev/null @@ -1,28 +1,1 @@ -// -// AVOID_ConfigValue.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 . -using System; -namespace VOID -{ - -} - - --- a/IVOID_Module.cs +++ b/IVOID_Module.cs @@ -24,13 +24,15 @@ { public interface IVOID_Module { - bool hasGUIConfig { get; } - bool toggleActive { get; } + string Name { get; } + bool toggleActive { get; set; } bool guiRunning { get; } void DrawGUI(); void StartGUI(); void StopGUI(); + + void DrawConfigurables(); void LoadConfig(); --- a/Tools.cs +++ b/Tools.cs @@ -32,13 +32,13 @@ namespace VOID { - public class VOIDLabels + public static class VOIDLabels { - public string void_primary; - public string void_altitude_asl; - public string void_velocity; - public string void_apoapsis; - public string void_periapsis; + public static string void_primary = "Primary"; + public static string void_altitude_asl = "Altitude (ASL)"; + public static string void_velocity = "Velocity"; + public static string void_apoapsis = "Apoapsis"; + public static string void_periapsis = "Periapsis"; } public static class Tools --- a/VOID_ConfigValue.cs +++ /dev/null @@ -1,115 +1,1 @@ -// -// VOID_Config.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 . -using System; -using System.Collections.Generic; -using KSP; -using UnityEngine; -namespace VOID -{ - public struct VOID_ConfigValue : IVOID_ConfigValue - { - private T _value; - private Type _type; - - public T value - { - get - { - return this._value; - } - set - { - this._value = value; - } - } - - public Type type - { - get - { - return this._type; - } - set - { - this._type = value; - } - } - - public object AsType - { - get - { - return (T)this._value; - } - } - - public void SetValue(object v) - { - this._value = (T)v; - } - - public static implicit operator T(VOID_ConfigValue v) - { - return v.value; - } - - public static implicit operator VOID_ConfigValue(T v) - { - VOID_ConfigValue r = new VOID_ConfigValue(); - r.value = v; - r.type = v.GetType(); - if (VOID_Core.Initialized) - { - VOID_Core.Instance.configDirty = true; - } - return r; - } - } - - public interface IVOID_ConfigValue - { - Type type { get; } - object AsType { get; } - void SetValue(object v); - } - - [AttributeUsage(AttributeTargets.Field)] - public class AVOID_ConfigValue : Attribute - { - protected string _name; - - public string Name - { - get - { - return this._name; - } - } - - public AVOID_ConfigValue(string fieldName) - { - this._name = fieldName; - } - } -} - - --- a/VOID_Core.cs +++ b/VOID_Core.cs @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using KSP; using UnityEngine; @@ -60,26 +61,28 @@ protected string VoidName = "VOID"; protected string VoidVersion = "0.9.9"; - [AVOID_ConfigValue("configValue")] - protected VOID_ConfigValue configVersion = 1; - - protected List _modules = new List(); + [AVOID_SaveValue("configValue")] + protected VOID_SaveValue configVersion = 1; + + protected List _modules = new List(); protected bool _modulesLoaded = false; - [AVOID_ConfigValue("mainWindowPos")] - protected VOID_ConfigValue mainWindowPos = new Rect(Screen.width / 2, Screen.height / 2, 10f, 10f); - - [AVOID_ConfigValue("mainGuiMinimized")] - protected VOID_ConfigValue mainGuiMinimized = false; - - [AVOID_ConfigValue("configWindowPos")] - protected VOID_ConfigValue configWindowPos = new Rect(Screen.width / 2, Screen.height /2, 10f, 10f); - - [AVOID_ConfigValue("configWindowMinimized")] - protected VOID_ConfigValue configWindowMinimized = true; - - [AVOID_ConfigValue("VOIDIconPos")] - protected VOID_ConfigValue VOIDIconPos = new Rect(Screen.width / 2 - 200, Screen.height - 30, 30f, 30f); + protected List _configurableCallbacks = new List(); + + [AVOID_SaveValue("mainWindowPos")] + protected VOID_SaveValue mainWindowPos = new Rect(Screen.width / 2, Screen.height / 2, 10f, 10f); + + [AVOID_SaveValue("mainGuiMinimized")] + protected VOID_SaveValue mainGuiMinimized = false; + + [AVOID_SaveValue("configWindowPos")] + protected VOID_SaveValue configWindowPos = new Rect(Screen.width / 2, Screen.height /2, 10f, 10f); + + [AVOID_SaveValue("configWindowMinimized")] + protected VOID_SaveValue configWindowMinimized = true; + + [AVOID_SaveValue("VOIDIconPos")] + protected VOID_SaveValue VOIDIconPos = new Rect(Screen.width / 2 - 200, Screen.height - 30, 30f, 30f); protected Texture2D VOIDIconOff = new Texture2D(30, 30, TextureFormat.ARGB32, false); protected Texture2D VOIDIconOn = new Texture2D(30, 30, TextureFormat.ARGB32, false); protected Texture2D VOIDIconTexture; @@ -88,31 +91,31 @@ protected int windowBaseID = -96518722; - [AVOID_ConfigValue("togglePower")] - public VOID_ConfigValue togglePower = true; + [AVOID_SaveValue("togglePower")] + public VOID_SaveValue togglePower = true; public bool powerAvailable = true; - [AVOID_ConfigValue("consumeResource")] - protected VOID_ConfigValue consumeResource = false; - - [AVOID_ConfigValue("resourceName")] - protected VOID_ConfigValue resourceName = "ElectricCharge"; - - [AVOID_ConfigValue("resourceRate")] - protected VOID_ConfigValue resourceRate = 0.2f; + [AVOID_SaveValue("consumeResource")] + protected VOID_SaveValue consumeResource = false; + + [AVOID_SaveValue("resourceName")] + protected VOID_SaveValue resourceName = "ElectricCharge"; + + [AVOID_SaveValue("resourceRate")] + protected VOID_SaveValue resourceRate = 0.2f; public float saveTimer = 0; protected string defaultSkin = "KSP window 2"; - protected VOID_ConfigValue _skin; + protected VOID_SaveValue _skin; public bool configDirty; /* * Properties * */ - public List Modules + public List Modules { get { @@ -149,8 +152,6 @@ this.VOIDIconOn = GameDatabase.Instance.GetTexture (this.VOIDIconOnPath, false); this.VOIDIconOff = GameDatabase.Instance.GetTexture (this.VOIDIconOffPath, false); - - Tools.PostDebugMessage (string.Format ("VOID_Core: Loaded {0} modules.", this.Modules.Count)); this.LoadConfig (); } @@ -166,7 +167,7 @@ ); Tools.PostDebugMessage (string.Format ( - "{0}: Checking {1} modules to check.", + "{0}: Found {1} modules to check.", this.GetType ().Name, types.Count () )); @@ -182,6 +183,8 @@ } this._modulesLoaded = true; + + Tools.PostDebugMessage (string.Format ("VOID_Core: Loaded {0} modules.", this.Modules.Count)); } protected void LoadModule(Type T) @@ -196,7 +199,15 @@ )); return; } - this._modules.Add (Activator.CreateInstance (T) as VOID_Module); + IVOID_Module module = Activator.CreateInstance (T) as IVOID_Module; + module.LoadConfig(); + this._modules.Add (module); + + Tools.PostDebugMessage(string.Format( + "{0}: loaded module {1}.", + this.GetType().Name, + T.Name + )); } public void Update() @@ -213,7 +224,7 @@ this.StopGUI (); } - foreach (VOID_Module module in this.Modules) + foreach (IVOID_Module module in this.Modules) { if (!module.guiRunning && module.toggleActive) { @@ -263,7 +274,7 @@ if (GUILayout.Button("Power " + str)) togglePower = !togglePower; if (togglePower) { - foreach (VOID_Module module in this.Modules) + foreach (IVOID_Module module in this.Modules) { module.toggleActive = GUILayout.Toggle (module.toggleActive, module.Name); } @@ -287,12 +298,22 @@ { GUILayout.BeginVertical (); - this.consumeResource = GUILayout.Toggle (this.consumeResource, "Consume Resources"); + this.DrawConfigurables (); GUILayout.EndVertical (); GUI.DragWindow (); } + public override void DrawConfigurables() + { + this.consumeResource = GUILayout.Toggle (this.consumeResource, "Consume Resources"); + + foreach (IVOID_Module mod in this.Modules) + { + mod.DrawConfigurables (); + } + } + public override void DrawGUI() { if (!this._modulesLoaded) @@ -304,7 +325,7 @@ int windowID = this.windowBaseID; - this.VOIDIconTexture = this.VOIDIconOff; //icon off default + this.VOIDIconTexture = this.VOIDIconOff; //icon off default if (this.togglePower) this.VOIDIconTexture = this.VOIDIconOn; //or on if power_toggle==true if (GUI.Button(new Rect(VOIDIconPos), VOIDIconTexture, new GUIStyle())) { @@ -324,7 +345,7 @@ GUILayout.Height (50) ); - if (_mainWindowPos != this.mainWindowPos.value) + if (_mainWindowPos != this.mainWindowPos) { this.mainWindowPos = _mainWindowPos; } @@ -334,7 +355,7 @@ { Rect _configWindowPos = this.configWindowPos; - this.configWindowPos = GUILayout.Window ( + _configWindowPos = GUILayout.Window ( ++windowID, _configWindowPos, this.VOIDConfigWindow, @@ -343,9 +364,9 @@ GUILayout.Height (50) ); - if (_configWindowPos != this.configWindowPos.value) - { - this.mainWindowPos = _configWindowPos; + if (_configWindowPos != this.configWindowPos) + { + this.configWindowPos = _configWindowPos; } } } @@ -354,7 +375,7 @@ { base.LoadConfig (); - foreach (VOID_Module module in this.Modules) + foreach (IVOID_Module module in this.Modules) { module.LoadConfig (); } @@ -369,7 +390,7 @@ base.SaveConfig (); - foreach (VOID_Module module in this.Modules) + foreach (IVOID_Module module in this.Modules) { module.SaveConfig (); } --- a/VOID_HUD.cs +++ b/VOID_HUD.cs @@ -32,14 +32,16 @@ /* * Fields * */ + protected string _Name = "Heads-Up Display"; + + protected new bool _hasConfigurables = true; + + [AVOID_SaveValue("colorIndex")] + protected VOID_SaveValue _colorIndex = 0; + protected List textColors = new List(); protected GUIStyle labelStyle; - - [AVOID_ConfigValue("colorIndex")] - protected VOID_ConfigValue _colorIndex = 0; - - protected Vessel vessel = null; /* * Properties @@ -67,7 +69,6 @@ * */ public VOID_HUD() : base() { - this._Name = "Heads-Up Display"; this.textColors.Add(Color.green); this.textColors.Add(Color.black); this.textColors.Add(Color.white); @@ -90,14 +91,9 @@ GUI.skin = VOID_Core.Instance.Skin; - if (vessel == null) + if (this.vessel == null) { - vessel = FlightGlobals.ActiveVessel; - } - - if (vessel != FlightGlobals.ActiveVessel) - { - vessel = FlightGlobals.ActiveVessel; + return; } if (VOID_Core.Instance.powerAvailable) @@ -106,26 +102,26 @@ GUI.Label ( new Rect ((Screen.width * .2083f), 0, 300f, 70f), - "Obt Alt: " + Tools.MuMech_ToSI (vessel.orbit.altitude) + "m" + - " Obt Vel: " + Tools.MuMech_ToSI (vessel.orbit.vel.magnitude) + "m/s" + - "\nAp: " + Tools.MuMech_ToSI (vessel.orbit.ApA) + "m" + - " ETA " + Tools.ConvertInterval (vessel.orbit.timeToAp) + - "\nPe: " + Tools.MuMech_ToSI (vessel.orbit.PeA) + "m" + - " ETA " + Tools.ConvertInterval (vessel.orbit.timeToPe) + - "\nInc: " + vessel.orbit.inclination.ToString ("F3") + "°", + "Obt Alt: " + Tools.MuMech_ToSI (this.vessel.orbit.altitude) + "m" + + " Obt Vel: " + Tools.MuMech_ToSI (this.vessel.orbit.vel.magnitude) + "m/s" + + "\nAp: " + Tools.MuMech_ToSI (this.vessel.orbit.ApA) + "m" + + " ETA " + Tools.ConvertInterval (this.vessel.orbit.timeToAp) + + "\nPe: " + Tools.MuMech_ToSI (this.vessel.orbit.PeA) + "m" + + " ETA " + Tools.ConvertInterval (this.vessel.orbit.timeToPe) + + "\nInc: " + this.vessel.orbit.inclination.ToString ("F3") + "°", labelStyle); // Toadicus edit: Added "Biome: " line to surf/atmo HUD GUI.Label ( new Rect ((Screen.width * .625f), 0, 300f, 90f), - "Srf Alt: " + Tools.MuMech_ToSI (Tools.TrueAltitude (vessel)) + "m" + - " Srf Vel: " + Tools.MuMech_ToSI (vessel.srf_velocity.magnitude) + "m/s" + - "\nVer: " + Tools.MuMech_ToSI (vessel.verticalSpeed) + "m/s" + - " Hor: " + Tools.MuMech_ToSI (vessel.horizontalSrfSpeed) + "m/s" + - "\nLat: " + Tools.GetLatitudeString (vessel, "F3") + - " Lon: " + Tools.GetLongitudeString (vessel, "F3") + - "\nHdg: " + Tools.MuMech_get_heading (vessel).ToString ("F2") + "° " + - Tools.get_heading_text (Tools.MuMech_get_heading (vessel)) + - "\nBiome: " + Tools.Toadicus_GetAtt (vessel).name, + "Srf Alt: " + Tools.MuMech_ToSI (Tools.TrueAltitude (this.vessel)) + "m" + + " Srf Vel: " + Tools.MuMech_ToSI (this.vessel.srf_velocity.magnitude) + "m/s" + + "\nVer: " + Tools.MuMech_ToSI (this.vessel.verticalSpeed) + "m/s" + + " Hor: " + Tools.MuMech_ToSI (this.vessel.horizontalSrfSpeed) + "m/s" + + "\nLat: " + Tools.GetLatitudeString (this.vessel, "F3") + + " Lon: " + Tools.GetLongitudeString (this.vessel, "F3") + + "\nHdg: " + Tools.MuMech_get_heading (this.vessel).ToString ("F2") + "° " + + Tools.get_heading_text (Tools.MuMech_get_heading (this.vessel)) + + "\nBiome: " + Tools.Toadicus_GetAtt (this.vessel).name, labelStyle); } else @@ -135,6 +131,14 @@ GUI.Label (new Rect ((Screen.width * .625f), 0, 300f, 70f), "-- POWER LOST --", labelStyle); } } + + public override void DrawConfigurables() + { + if (GUILayout.Button ("Change HUD color", GUILayout.ExpandWidth (false))) + { + ++this.ColorIndex; + } + } } } --- a/VOID_Module.cs +++ b/VOID_Module.cs @@ -25,29 +25,20 @@ namespace VOID { - public abstract class VOID_Module + public abstract class VOID_Module : IVOID_Module { /* * Fields * */ - [AVOID_ConfigValue("Active")] - protected VOID_ConfigValue _Active = true; + [AVOID_SaveValue("Active")] + protected VOID_SaveValue _Active = true; protected bool _Running = false; - protected bool _hasGUICfg = false; protected string _Name; /* * Properties * */ - public virtual bool hasGUIConfig - { - get - { - return this._hasGUICfg; - } - } - public virtual bool toggleActive { get @@ -76,6 +67,14 @@ } } + public virtual Vessel vessel + { + get + { + return FlightGlobals.ActiveVessel; + } + } + /* * Methods * */ @@ -100,6 +99,8 @@ public abstract void DrawGUI(); + public virtual void DrawConfigurables() {} + public virtual void LoadConfig() { var config = KSP.IO.PluginConfiguration.CreateForType (); @@ -111,22 +112,22 @@ BindingFlags.Instance )) { - object[] attrs = field.GetCustomAttributes(typeof(AVOID_ConfigValue), false); + object[] attrs = field.GetCustomAttributes(typeof(AVOID_SaveValue), false); if (attrs.Length == 0) { return; } - AVOID_ConfigValue attr = attrs.FirstOrDefault () as AVOID_ConfigValue; + AVOID_SaveValue attr = attrs.FirstOrDefault () as AVOID_SaveValue; string fieldName = string.Format("{0}_{1}", this.GetType().Name, attr.Name); object fieldValue = field.GetValue(this); bool convertBack = false; - if (fieldValue is IVOID_ConfigValue) + if (fieldValue is IVOID_SaveValue) { - fieldValue = (fieldValue as IVOID_ConfigValue).AsType; + fieldValue = (fieldValue as IVOID_SaveValue).AsType; convertBack = true; } @@ -134,8 +135,8 @@ if (convertBack) { - Type type = typeof(VOID_ConfigValue<>).MakeGenericType (fieldValue.GetType ()); - IVOID_ConfigValue convertValue = Activator.CreateInstance (type) as IVOID_ConfigValue; + Type type = typeof(VOID_SaveValue<>).MakeGenericType (fieldValue.GetType ()); + IVOID_SaveValue convertValue = Activator.CreateInstance (type) as IVOID_SaveValue; convertValue.SetValue (fieldValue); fieldValue = convertValue; } @@ -162,21 +163,21 @@ BindingFlags.Instance )) { - object[] attrs = field.GetCustomAttributes(typeof(AVOID_ConfigValue), false); + object[] attrs = field.GetCustomAttributes(typeof(AVOID_SaveValue), false); if (attrs.Length == 0) { return; } - AVOID_ConfigValue attr = attrs.FirstOrDefault () as AVOID_ConfigValue; + AVOID_SaveValue attr = attrs.FirstOrDefault () as AVOID_SaveValue; string fieldName = string.Format("{0}_{1}", this.GetType().Name, attr.Name); object fieldValue = field.GetValue(this); - if (fieldValue is IVOID_ConfigValue) + if (fieldValue is IVOID_SaveValue) { - fieldValue = (fieldValue as IVOID_ConfigValue).AsType; + fieldValue = (fieldValue as IVOID_SaveValue).AsType; } config.SetValue(fieldName, fieldValue); --- /dev/null +++ b/VOID_Orbital.cs @@ -1,1 +1,161 @@ +// +// VOID_Orbital.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 . +using KSP; +using System; +using UnityEngine; +namespace VOID +{ + public class VOID_Orbital : VOID_Module + { + protected new string _Name = "Orbital Information"; + + [AVOID_SaveValue("OrbitalWindowPos")] + protected Rect OrbitalWindowPos = new Rect(Screen.width / 2, Screen.height / 2, 10f, 10f); + + [AVOID_SaveValue("toggleExtendedOribtal")] + protected bool toggleExtendedOribtal = false; + + public void OrbitalWindow(int _) + { + // Toadicus edit: added local sidereal longitude. + double LSL = vessel.longitude + vessel.orbit.referenceBody.rotationAngle; + LSL = Tools.FixDegreeDomain (LSL); + + GUILayout.BeginVertical(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(VOIDLabels.void_primary + ":"); + GUILayout.Label(vessel.mainBody.bodyName, GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(VOIDLabels.void_altitude_asl + ":"); + GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.altitude) + "m", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(VOIDLabels.void_velocity + ":"); + GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.vel.magnitude) + "m/s", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(VOIDLabels.void_apoapsis + ":"); + GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.ApA) + "m", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Time to Ap:"); + GUILayout.Label(Tools.ConvertInterval(vessel.orbit.timeToAp), GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(VOIDLabels.void_periapsis + ":"); + GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.PeA) + "m", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Time to Pe:"); + GUILayout.Label(Tools.ConvertInterval(vessel.orbit.timeToPe), GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Inclination:"); + GUILayout.Label(vessel.orbit.inclination.ToString("F3") + "°", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + double r_vessel = vessel.mainBody.Radius + vessel.mainBody.GetAltitude(vessel.findWorldCenterOfMass()); + double g_vessel = (VOID_Core.Constant_G * vessel.mainBody.Mass) / Math.Pow(r_vessel, 2); + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Gravity:"); + GUILayout.Label(Tools.MuMech_ToSI(g_vessel) + "m/s²", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + toggleExtendedOribtal = GUILayout.Toggle(toggleExtendedOribtal, "Extended info"); + + if (toggleExtendedOribtal) + { + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Period:"); + GUILayout.Label(Tools.ConvertInterval(vessel.orbit.period), GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Semi-major axis:"); + GUILayout.Label((vessel.orbit.semiMajorAxis / 1000).ToString("##,#") + "km", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Eccentricity:"); + GUILayout.Label(vessel.orbit.eccentricity.ToString("F4"), GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + // Toadicus edit: convert mean anomaly into degrees. + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Mean anomaly:"); + GUILayout.Label((vessel.orbit.meanAnomaly * 180d / Math.PI).ToString("F3") + "°", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("True anomaly:"); + GUILayout.Label(vessel.orbit.trueAnomaly.ToString("F3") + "°", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + // Toadicus edit: convert eccentric anomaly into degrees. + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Eccentric anomaly:"); + GUILayout.Label((vessel.orbit.eccentricAnomaly * 180d / Math.PI).ToString("F3") + "°", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Long. ascending node:"); + GUILayout.Label(vessel.orbit.LAN.ToString("F3") + "°", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Arg. of periapsis:"); + GUILayout.Label(vessel.orbit.argumentOfPeriapsis.ToString("F3") + "°", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + // Toadicus edit: added local sidereal longitude. + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("Local Sidereal Longitude:"); + GUILayout.Label(LSL.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["txt_right"]); + GUILayout.EndHorizontal(); + } + + GUILayout.EndVertical(); + GUI.DragWindow(); + } + + public override void DrawGUI() + { + OrbitalWindowPos = GUILayout.Window( + ++VOID_Core.Instance.windowID, + OrbitalWindowPos, + this.OrbitalWindow, + this.Name, GUILayout.Width(250), + GUILayout.Height(50)); + } + } +} + + --- /dev/null +++ b/VOID_SaveValue.cs @@ -1,1 +1,115 @@ +// +// VOID_Config.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 . +using System; +using System.Collections.Generic; +using KSP; +using UnityEngine; +namespace VOID +{ + public struct VOID_SaveValue : IVOID_SaveValue + { + private T _value; + private Type _type; + + public T value + { + get + { + return this._value; + } + set + { + this._value = value; + } + } + + public Type type + { + get + { + return this._type; + } + set + { + this._type = value; + } + } + + public object AsType + { + get + { + return (T)this._value; + } + } + + public void SetValue(object v) + { + this._value = (T)v; + } + + public static implicit operator T(VOID_SaveValue v) + { + return v.value; + } + + public static implicit operator VOID_SaveValue(T v) + { + VOID_SaveValue r = new VOID_SaveValue(); + r.value = v; + r.type = v.GetType(); + if (VOID_Core.Initialized) + { + VOID_Core.Instance.configDirty = true; + } + return r; + } + } + + public interface IVOID_SaveValue + { + Type type { get; } + object AsType { get; } + void SetValue(object v); + } + + [AttributeUsage(AttributeTargets.Field)] + public class AVOID_SaveValue : Attribute + { + protected string _name; + + public string Name + { + get + { + return this._name; + } + } + + public AVOID_SaveValue(string fieldName) + { + this._name = fieldName; + } + } +} + +