From: Andy Date: Mon, 02 Dec 2013 17:17:22 +0000 Subject: VOID_Core: Initalize _skinName with defaultSkin in ctor. X-Git-Tag: 0.9.15 X-Git-Url: http://git.toad.homelinux.net/projects/VOID.git/commitdiff/e3ccbf5 --- VOID_Core: Initalize _skinName with defaultSkin in ctor. --- --- a/IntCollection.cs +++ b/IntCollection.cs @@ -22,7 +22,7 @@ namespace VOID { - public class IntCollection : IVOID_SaveValue + public class IntCollection { public static implicit operator long(IntCollection c) { @@ -34,14 +34,6 @@ public long collection { get; protected set; } public ushort maxCount { get; protected set; } public ushort wordLength { get; protected set; } - - public Type type { get { return typeof(long); } } - public object AsType { get { return this.collection; } } - - public void SetValue(object v) - { - this.collection = (long)v; - } public IntCollection (ushort wordLength = 4, long initialCollection = 0) { --- a/VOID.csproj +++ /dev/null @@ -1,96 +1,1 @@ - - - - Debug - x86 - 10.0.0 - 2.0 - {45ACC1CC-942C-4A66-BFC7-8BE375938B18} - Library - VOID - VOID - v3.5 - - - true - full - false - bin\Debug - DEBUG; TRACE - prompt - 4 - false - - - - - - - - true - bin\Release - prompt - 4 - false - TRACE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ..\..\..\..\..\mnt\games-ssd\KSP_linux\KSP_Data\Managed\Assembly-CSharp.dll - False - - - ..\..\..\..\..\mnt\games-ssd\KSP_linux\KSP_Data\Managed\UnityEngine.dll - False - - - ..\..\..\..\..\mnt\games-ssd\KSP_linux\KSP_Data\Managed\System.dll - False - - - - - {2FCF882B-0771-4649-8D04-81D7AA76A486} - Engineer.Extensions - - - {30FD6C0B-D36E-462F-B0FF-F0FAC9C666CF} - VesselSimulator - - - - - - - - - - - - + --- a/VOIDFlightMaster.cs +++ b/VOIDFlightMaster.cs @@ -49,6 +49,7 @@ Tools.PostDebugMessage ("VOIDFlightMaster: Waking up."); this.Core = (VOID_Core)VOID_Core.Instance; this.Core.ResetGUI (); + SimManager.HardReset(); Tools.PostDebugMessage ("VOIDFlightMaster: Awake."); } @@ -68,13 +69,6 @@ } this.Core.Update (); - - if (this.Core.vessel != null) - { - SimManager.Instance.Gravity = VOID_Core.Instance.vessel.mainBody.gravParameter / - Math.Pow(VOID_Core.Instance.vessel.mainBody.Radius, 2); - SimManager.Instance.TryStartSimulation(); - } if (this.Core.factoryReset) { @@ -115,6 +109,7 @@ Tools.PostDebugMessage ("VOIDEditorMaster: Waking up."); this.Core = VOID_EditorCore.Instance; this.Core.ResetGUI (); + SimManager.HardReset(); Tools.PostDebugMessage ("VOIDEditorMaster: Awake."); } --- a/VOID_CBInfoBrowser.cs +++ b/VOID_CBInfoBrowser.cs @@ -207,89 +207,89 @@ private void body_OP_show_orbital_info(CelestialBody body) { //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label((body.orbit.ApA / 1000).ToString("##,#") + "km", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(Tools.ConvertInterval(body.orbit.timeToAp), VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label((body.orbit.PeA / 1000).ToString("##,#") + "km", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(Tools.ConvertInterval(body.orbit.timeToPe), VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label((body.orbit.semiMajorAxis / 1000).ToString("##,#") + "km", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(body.orbit.eccentricity.ToString("F4") + "", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(Tools.ConvertInterval(body.orbit.period), VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(Tools.ConvertInterval(body.rotationPeriod), VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label((body.orbit.orbitalSpeed / 1000).ToString("F2") + "km/s", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label((body.orbit.ApA / 1000).ToString("##,#") + "km", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(Tools.ConvertInterval(body.orbit.timeToAp), VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label((body.orbit.PeA / 1000).ToString("##,#") + "km", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(Tools.ConvertInterval(body.orbit.timeToPe), VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label((body.orbit.semiMajorAxis / 1000).ToString("##,#") + "km", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(body.orbit.eccentricity.ToString("F4") + "", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(Tools.ConvertInterval(body.orbit.period), VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(Tools.ConvertInterval(body.rotationPeriod), VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label((body.orbit.orbitalSpeed / 1000).ToString("F2") + "km/s", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); //GUILayout.EndHorizontal(); //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); // Toadicus edit: convert mean anomaly into degrees. - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label((body.orbit.meanAnomaly * 180d / Math.PI).ToString("F3") + "°", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(body.orbit.trueAnomaly.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label((body.orbit.meanAnomaly * 180d / Math.PI).ToString("F3") + "°", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(body.orbit.trueAnomaly.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); //GUILayout.EndHorizontal(); //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); // Toadicus edit: convert eccentric anomaly into degrees. - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label((body.orbit.eccentricAnomaly * 180d / Math.PI).ToString("F3") + "°", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(body.orbit.inclination.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(body.orbit.LAN.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(body.orbit.argumentOfPeriapsis.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label((body.orbit.eccentricAnomaly * 180d / Math.PI).ToString("F3") + "°", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(body.orbit.inclination.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(body.orbit.LAN.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(body.orbit.argumentOfPeriapsis.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label("N/A", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); else { string body_tidally_locked = "No"; if (body.tidallyLocked) body_tidally_locked = "Yes"; - GUILayout.Label(body_tidally_locked, VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + GUILayout.Label(body_tidally_locked, VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); } //GUILayout.EndHorizontal(); } @@ -297,35 +297,35 @@ private void body_OP_show_physical_info(CelestialBody body) { //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label((body.Radius / 1000).ToString("##,#") + "km", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(((Math.Pow((body.Radius), 2) * 4 * Math.PI) / 1000).ToString("0.00e+00") + "km²", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + GUILayout.Label((body.Radius / 1000).ToString("##,#") + "km", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(((Math.Pow((body.Radius), 2) * 4 * Math.PI) / 1000).ToString("0.00e+00") + "km²", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); //GUILayout.EndHorizontal(); //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); // divide by 1000 to convert m to km - GUILayout.Label((((4d / 3) * Math.PI * Math.Pow(body.Radius, 3)) / 1000).ToString("0.00e+00") + "km³", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.Label(((4 / 3) * Math.PI * Math.Pow((vessel.mainBody.Radius / 1000), 3)).ToString(), txt_right, GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(body.Mass.ToString("0.00e+00") + "kg", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + GUILayout.Label((((4d / 3) * Math.PI * Math.Pow(body.Radius, 3)) / 1000).ToString("0.00e+00") + "km³", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.Label(((4 / 3) * Math.PI * Math.Pow((vessel.mainBody.Radius / 1000), 3)).ToString(), right, GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(body.Mass.ToString("0.00e+00") + "kg", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); //GUILayout.EndHorizontal(); double p = body.Mass / (Math.Pow(body.Radius, 3) * (4d / 3) * Math.PI); //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(p.ToString("##,#") + "kg/m³", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - if (body.bodyName == "Sun") GUILayout.Label(Tools.MuMech_ToSI(body.sphereOfInfluence), VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - else GUILayout.Label(Tools.MuMech_ToSI(body.sphereOfInfluence), VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(body.orbitingBodies.Count.ToString(), VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + GUILayout.Label(p.ToString("##,#") + "kg/m³", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + if (body.bodyName == "Sun") GUILayout.Label(Tools.MuMech_ToSI(body.sphereOfInfluence), VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + else GUILayout.Label(Tools.MuMech_ToSI(body.sphereOfInfluence), VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(body.orbitingBodies.Count.ToString(), VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); //GUILayout.EndHorizontal(); //show # artificial satellites @@ -336,28 +336,28 @@ } //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(num_art_sats.ToString(), VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + GUILayout.Label(num_art_sats.ToString(), VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); //GUILayout.EndHorizontal(); double g_ASL = (VOID_Core.Constant_G * body.Mass) / Math.Pow(body.Radius, 2); //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(Tools.MuMech_ToSI(g_ASL) + "m/s²", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); - //GUILayout.EndHorizontal(); - - //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("≈ " + Tools.MuMech_ToSI(body.maxAtmosphereAltitude) + "m", VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + GUILayout.Label(Tools.MuMech_ToSI(g_ASL) + "m/s²", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); + //GUILayout.EndHorizontal(); + + //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label("≈ " + Tools.MuMech_ToSI(body.maxAtmosphereAltitude) + "m", VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); //GUILayout.EndHorizontal(); //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); string O2 = "No"; if (body.atmosphereContainsOxygen == true) O2 = "Yes"; - GUILayout.Label(O2, VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + GUILayout.Label(O2, VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); //GUILayout.EndHorizontal(); //GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); string ocean = "No"; if (body.ocean == true) ocean = "Yes"; - GUILayout.Label(ocean, VOID_Core.Instance.LabelStyles["txt_right"], GUILayout.ExpandWidth(true)); + GUILayout.Label(ocean, VOID_Core.Instance.LabelStyles["right"], GUILayout.ExpandWidth(true)); //GUILayout.EndHorizontal(); } } --- a/VOID_Core.cs +++ b/VOID_Core.cs @@ -21,9 +21,9 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Reflection; using KSP; using UnityEngine; +using Engineer.VesselSimulator; namespace VOID { @@ -68,7 +68,7 @@ * Fields * */ protected string VoidName = "VOID"; - protected string VoidVersion = "0.9.11"; + protected string VoidVersion = "0.9.14"; protected bool _factoryReset = false; @@ -135,10 +135,12 @@ public float saveTimer = 0; + protected string defaultSkin = "KSP window 2"; + [AVOID_SaveValue("defaultSkin")] - protected VOID_SaveValue defaultSkin = "KSP window 2"; - protected int _skinIdx = int.MinValue; - protected List skin_list; + protected VOID_SaveValue _skinName; + protected Dictionary skin_list; + protected List skinNames; protected string[] forbiddenSkins = { "PlaqueDialogSkin", @@ -176,11 +178,11 @@ { get { - if (this.skin_list == null || this._skinIdx < 0 || this._skinIdx > this.skin_list.Count) + if (!this.skinsLoaded || this._skinName == null) { return AssetBase.GetGUISkin(this.defaultSkin); } - return this.skin_list[this._skinIdx]; + return this.skin_list[this._skinName]; } } @@ -247,6 +249,8 @@ this.VOIDIconOn = GameDatabase.Instance.GetTexture (this.VOIDIconOnPath, false); this.VOIDIconOff = GameDatabase.Instance.GetTexture (this.VOIDIconOffPath, false); + + this._skinName = this.defaultSkin; this.LoadConfig (); } @@ -333,6 +337,13 @@ { this.Preload_BeforeUpdate (); + if (this.vessel != null) + { + SimManager.Instance.Gravity = VOID_Core.Instance.vessel.mainBody.gravParameter / + Math.Pow(VOID_Core.Instance.vessel.mainBody.Radius, 2); + SimManager.Instance.TryStartSimulation(); + } + if (!this.guiRunning) { this.StartGUI (); @@ -399,7 +410,7 @@ this.skin_list = AssetBase.FindObjectsOfTypeIncludingAssets(typeof(GUISkin)) .Where(s => !this.forbiddenSkins.Contains(s.name)) .Select(s => s as GUISkin) - .ToList(); + .ToDictionary(s => s.name); Tools.PostDebugMessage(string.Format( "{0}: loaded {1} GUISkins.", @@ -407,9 +418,12 @@ this.skin_list.Count )); - if (this._skinIdx == int.MinValue) - { - this._skinIdx = this.skin_list.IndexOf(this.Skin); + this.skinNames = this.skin_list.Keys.ToList(); + this.skinNames.Sort(); + + if (this._skinName == null || !this.skinNames.Contains(this._skinName)) + { + this._skinName = this.defaultSkin; Tools.PostDebugMessage(string.Format( "{0}: resetting _skinIdx to default.", this.GetType().Name @@ -419,7 +433,7 @@ Tools.PostDebugMessage(string.Format( "{0}: _skinIdx = {1}.", this.GetType().Name, - this._skinIdx.ToString() + this._skinName.ToString() )); this.skinsLoaded = true; @@ -427,6 +441,9 @@ protected void LoadGUIStyles() { + this.LabelStyles["link"] = new GUIStyle(GUI.skin.label); + this.LabelStyles["link"].fontStyle = FontStyle.Bold; + this.LabelStyles["center"] = new GUIStyle(GUI.skin.label); this.LabelStyles["center"].normal.textColor = Color.white; this.LabelStyles["center"].alignment = TextAnchor.UpperCenter; @@ -439,6 +456,10 @@ this.LabelStyles["right"] = new GUIStyle(GUI.skin.label); this.LabelStyles["right"].normal.textColor = Color.white; this.LabelStyles["right"].alignment = TextAnchor.UpperRight; + + this.LabelStyles ["red"] = new GUIStyle(GUI.skin.label); + this.LabelStyles ["red"].normal.textColor = Color.red; + this.LabelStyles ["red"].alignment = TextAnchor.MiddleCenter; this.GUIStylesLoaded = true; } @@ -501,10 +522,7 @@ } else { - GUIStyle label_txt_red = new GUIStyle(GUI.skin.label); - label_txt_red.normal.textColor = Color.red; - label_txt_red.alignment = TextAnchor.MiddleCenter; - GUILayout.Label("-- POWER LOST --", label_txt_red); + GUILayout.Label("-- POWER LOST --", this.LabelStyles["red"]); } this.configWindowMinimized = !GUILayout.Toggle (!this.configWindowMinimized, "Configuration"); @@ -525,6 +543,10 @@ public override void DrawConfigurables() { + int skinIdx; + + GUIContent _content; + if (HighLogic.LoadedSceneIsFlight) { this.consumeResource = GUILayout.Toggle (this.consumeResource, "Consume Resources"); @@ -536,24 +558,36 @@ GUILayout.Label("Skin:", GUILayout.ExpandWidth(false)); - GUIContent _content = new GUIContent(); + _content = new GUIContent(); + + if (skinNames.Contains(this._skinName)) + { + skinIdx = skinNames.IndexOf(this._skinName); + } + else if (skinNames.Contains(this.defaultSkin)) + { + skinIdx = skinNames.IndexOf(this.defaultSkin); + } + else + { + skinIdx = 0; + } _content.text = "◄"; _content.tooltip = "Select previous skin"; if (GUILayout.Button(_content, GUILayout.ExpandWidth(true))) { - this._skinIdx--; - if (this._skinIdx < 0) this._skinIdx = skin_list.Count - 1; + skinIdx--; + if (skinIdx < 0) skinIdx = skinNames.Count - 1; Tools.PostDebugMessage (string.Format ( "{0}: new this._skinIdx = {1} :: skin_list.Count = {2}", this.GetType().Name, - this._skinIdx, + this._skinName, this.skin_list.Count )); } - string skin_name = skin_list[this._skinIdx].name; - _content.text = skin_name; + _content.text = this.Skin.name; _content.tooltip = "Current skin"; GUILayout.Label(_content, this.LabelStyles["center"], GUILayout.ExpandWidth(true)); @@ -561,19 +595,19 @@ _content.tooltip = "Select next skin"; if (GUILayout.Button(_content, GUILayout.ExpandWidth(true))) { - this._skinIdx++; - if (this._skinIdx >= skin_list.Count) this._skinIdx = 0; + skinIdx++; + if (skinIdx >= skinNames.Count) skinIdx = 0; Tools.PostDebugMessage (string.Format ( "{0}: new this._skinIdx = {1} :: skin_list.Count = {2}", this.GetType().Name, - this._skinIdx, + this._skinName, this.skin_list.Count )); } - if (this.Skin.name != this.defaultSkin) - { - this.defaultSkin = this.Skin.name; + if (this._skinName != skinNames[skinIdx]) + { + this._skinName = skinNames[skinIdx]; } GUILayout.EndHorizontal(); @@ -680,7 +714,7 @@ this.VOIDIconTexture = this.VOIDIconOff; //icon off default if (this.togglePower) this.VOIDIconTexture = this.VOIDIconOn; //or on if power_toggle==true - if (GUI.Button(VOIDIconPos, VOIDIconTexture, new GUIStyle()) && this.VOIDIconLocked) + if (GUI.Button(VOIDIconPos, VOIDIconTexture) && this.VOIDIconLocked) { this.mainGuiMinimized = !this.mainGuiMinimized; } --- /dev/null +++ b/VOID_DataValue.cs @@ -1,1 +1,305 @@ - +// +// VOID_DataValue.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 UnityEngine; + +namespace VOID +{ + public interface IVOID_DataValue + { + void Refresh(); + string ValueUnitString(); + void DoGUIHorizontal(); + } + + public class VOID_DataValue : IVOID_DataValue + { + /* + * Static Members + * */ + public static implicit operator T(VOID_DataValue v) + { + return (T)v.Value; + } + + /* + * Instance Members + * */ + /* + * Fields + * */ + protected T cache; + protected Func ValueFunc; + + /* + * Properties + * */ + public string Label { get; protected set; } + public string Units { get; protected set; } + + public T Value { + get { + return (T)this.cache; + } + } + + /* + * Methods + * */ + public VOID_DataValue(string Label, Func ValueFunc, string Units = "") + { + this.Label = Label; + this.Units = Units; + this.ValueFunc = ValueFunc; + } + + public void Refresh() + { + this.cache = this.ValueFunc.Invoke (); + } + + public T GetFreshValue() + { + this.Refresh (); + return (T)this.cache; + } + + public string ValueUnitString() { + return this.Value.ToString() + this.Units; + } + + public virtual void DoGUIHorizontal() + { + GUILayout.BeginHorizontal (GUILayout.ExpandWidth (true)); + GUILayout.Label (this.Label + ":"); + GUILayout.FlexibleSpace (); + GUILayout.Label (this.ValueUnitString(), GUILayout.ExpandWidth (false)); + GUILayout.EndHorizontal (); + } + + public override string ToString() + { + return string.Format ( + "{0}: {1}{2}", + this.Label, + this.Value.ToString (), + this.Units + ); + } + } + + internal interface IVOID_NumericValue + { + double ToDouble(); + string ToString(string format); + string ToSIString(int digits, int MinMagnitude, int MaxMagnitude); + } + + public abstract class VOID_NumValue : VOID_DataValue, IVOID_NumericValue + { + public VOID_NumValue(string Label, Func ValueFunc, string Units = "") : base(Label, ValueFunc, Units) {} + + public abstract double ToDouble(); + public abstract string ToString(string Format); + public abstract string ToSIString(int digits = 3, int MinMagnitude = 0, int MaxMagnitude = int.MaxValue); + + public abstract string ValueUnitString(string format); + + public virtual string ValueUnitString(int digits) { + return Tools.MuMech_ToSI(this.ToDouble(), digits) + this.Units; + } + + public virtual string ValueUnitString(int digits, int MinMagnitude, int MaxMagnitude) + { + return Tools.MuMech_ToSI(this.ToDouble(), digits, MinMagnitude, MaxMagnitude) + this.Units; + } + + public virtual void DoGUIHorizontal(string format) + { + GUILayout.BeginHorizontal (GUILayout.ExpandWidth (true)); + GUILayout.Label (this.Label + ":"); + GUILayout.FlexibleSpace (); + GUILayout.Label (this.ValueUnitString(format), GUILayout.ExpandWidth (false)); + GUILayout.EndHorizontal (); + } + + public virtual int DoGUIHorizontal(int digits, bool precisionButton = true) + { + if (precisionButton) + { + return this.DoGUIHorizontalPrec(digits); + } + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(this.Label + " (P" + digits + "):", GUILayout.ExpandWidth(true)); + GUILayout.FlexibleSpace(); + GUILayout.Label(this.ValueUnitString(digits), GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + return digits; + } + + public virtual int DoGUIHorizontalPrec(int digits) + { + float magnitude; + float magLimit; + + magnitude = (float)Math.Log10(Math.Abs(this.ToDouble())); + + magLimit = Mathf.Max(magnitude, 6f); + magLimit = Mathf.Round((float)Math.Ceiling(magLimit / 3f) * 3f); + + GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); + GUILayout.Label(this.Label + "ⁱ:", GUILayout.ExpandWidth(true)); + GUILayout.FlexibleSpace(); + + GUILayout.Label(this.ValueUnitString(3, int.MinValue, (int)magnitude - digits), GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + + if (Event.current.type == EventType.mouseUp) + { + Rect lastRect = GUILayoutUtility.GetLastRect(); + if (lastRect.Contains(Event.current.mousePosition)) + { + if (Event.current.button == 0) + { + digits = (digits + 3) % (int)magLimit; + } + else if (Event.current.button == 1) + { + digits = (digits - 3) % (int)magLimit; + if (digits < 0) + { + digits = (int)magLimit - 3; + } + } + } + } + + return digits; + } + } + + public class VOID_DoubleValue : VOID_NumValue, IVOID_NumericValue + { + public VOID_DoubleValue(string Label, Func ValueFunc, string Units) : base(Label, ValueFunc, Units) {} + + public override double ToDouble () + { + return this.Value; + } + + public override string ToString(string format) + { + return string.Format ( + "{0}: {1}{2}", + this.Label, + this.Value.ToString (format), + this.Units + ); + } + + public override string ValueUnitString(string format) { + return this.Value.ToString(format) + this.Units; + } + + public override string ToSIString(int digits = 3, int MinMagnitude = 0, int MaxMagnitude = int.MaxValue) + { + return string.Format ( + "{0}{1}", + Tools.MuMech_ToSI (this.Value, digits, MinMagnitude, MaxMagnitude), + this.Units + ); + } + } + public class VOID_FloatValue : VOID_NumValue, IVOID_NumericValue + { + public VOID_FloatValue(string Label, Func ValueFunc, string Units) : base(Label, ValueFunc, Units) {} + + public override double ToDouble () + { + return (double)this.Value; + } + + public override string ValueUnitString(string format) { + return this.Value.ToString(format) + this.Units; + } + + public override string ToString(string format) + { + return string.Format ( + "{0}: {1}{2}", + this.Label, + this.Value.ToString (format), + this.Units + ); + } + + public override string ToSIString(int digits = 3, int MinMagnitude = 0, int MaxMagnitude = int.MaxValue) + { + return string.Format ( + "{0}{1}", + Tools.MuMech_ToSI ((double)this.Value, digits, MinMagnitude, MaxMagnitude), + this.Units + ); + } + } + public class VOID_IntValue : VOID_NumValue, IVOID_NumericValue + { + public VOID_IntValue(string Label, Func ValueFunc, string Units) : base(Label, ValueFunc, Units) {} + + public override double ToDouble () + { + return (double)this.Value; + } + + public override string ValueUnitString(string format) { + return this.Value.ToString(format) + this.Units; + } + + public override string ToString(string format) + { + return string.Format ( + "{0}: {1}{2}", + this.Label, + this.Value.ToString (format), + this.Units + ); + } + + public override string ToSIString(int digits = 3, int MinMagnitude = 0, int MaxMagnitude = int.MaxValue) + { + return string.Format ( + "{0}{1}", + Tools.MuMech_ToSI ((double)this.Value, digits, MinMagnitude, MaxMagnitude), + this.Units + ); + } + } + + + public class VOID_StrValue : VOID_DataValue + { + public VOID_StrValue(string Label, Func ValueFunc) : base(Label, ValueFunc, "") {} + } +} + + --- a/VOID_HUD.cs +++ b/VOID_HUD.cs @@ -36,8 +36,6 @@ protected VOID_SaveValue _colorIndex = 0; protected List textColors = new List(); - - protected GUIStyle labelStyle; /* * Properties @@ -79,8 +77,8 @@ this.textColors.Add(Color.cyan); this.textColors.Add(Color.magenta); - this.labelStyle = new GUIStyle (); - this.labelStyle.normal.textColor = this.textColors [this.ColorIndex]; + VOID_Core.Instance.LabelStyles["hud"] = new GUIStyle(); + VOID_Core.Instance.LabelStyles["hud"].normal.textColor = this.textColors [this.ColorIndex]; Tools.PostDebugMessage ("VOID_HUD: Constructed."); } @@ -91,7 +89,7 @@ if (VOID_Core.Instance.powerAvailable) { - labelStyle.normal.textColor = textColors [ColorIndex]; + VOID_Core.Instance.LabelStyles["hud"].normal.textColor = textColors [ColorIndex]; GUI.Label ( new Rect ((Screen.width * .2083f), 0, 300f, 70f), @@ -101,8 +99,9 @@ " 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") + "°", - labelStyle); + "\nInc: " + vessel.orbit.inclination.ToString ("F3") + "°" + + "\nPrimary: " + vessel.mainBody.bodyName, + VOID_Core.Instance.LabelStyles["hud"]); // Toadicus edit: Added "Biome: " line to surf/atmo HUD GUI.Label ( new Rect ((Screen.width * .625f), 0, 300f, 90f), @@ -115,13 +114,13 @@ "\nHdg: " + Tools.MuMech_get_heading (vessel).ToString ("F2") + "° " + Tools.get_heading_text (Tools.MuMech_get_heading (vessel)) + "\nBiome: " + Tools.Toadicus_GetAtt (vessel).name, - labelStyle); + VOID_Core.Instance.LabelStyles["hud"]); } else { - labelStyle.normal.textColor = Color.red; - GUI.Label (new Rect ((Screen.width * .2083f), 0, 300f, 70f), "-- POWER LOST --", labelStyle); - GUI.Label (new Rect ((Screen.width * .625f), 0, 300f, 70f), "-- POWER LOST --", labelStyle); + VOID_Core.Instance.LabelStyles["hud"].normal.textColor = Color.red; + GUI.Label (new Rect ((Screen.width * .2083f), 0, 300f, 70f), "-- POWER LOST --", VOID_Core.Instance.LabelStyles["hud"]); + GUI.Label (new Rect ((Screen.width * .625f), 0, 300f, 70f), "-- POWER LOST --", VOID_Core.Instance.LabelStyles["hud"]); } } --- a/VOID_Module.cs +++ b/VOID_Module.cs @@ -133,22 +133,15 @@ 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 (isIntCollection) { - fieldValue = new IntCollection (4, (long)fieldValue); - } - else if (convertBack) + if (convertBack) { Type type = typeof(VOID_SaveValue<>).MakeGenericType (fieldValue.GetType ()); IVOID_SaveValue convertValue = Activator.CreateInstance (type) as IVOID_SaveValue; @@ -202,10 +195,69 @@ protected float defWidth = 250f; protected float defHeight = 50f; - public abstract void ModuleWindow(int _); + public virtual void ModuleWindow(int _) + { + if (VOID_Core.Instance.updateTimer - this.lastUpdate > VOID_Core.Instance.updatePeriod) { + Tools.PostDebugMessage(string.Format( + "{0}: refreshing VOID_DataValues.", + this.GetType().Name + )); + + foreach (var fieldinfo in this.GetType().GetFields( + BindingFlags.Instance | + BindingFlags.NonPublic | + BindingFlags.Public | + BindingFlags.FlattenHierarchy + )) { + Tools.PostDebugMessage(string.Format( + "{0}: checking field {1}.", + this.GetType().Name, + fieldinfo.Name + )); + + 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 ())) { + Tools.PostDebugMessage(string.Format( + "{0}: found field {1}.", + this.GetType().Name, + fieldinfo.Name + )); + + (field as IVOID_DataValue).Refresh (); + + Tools.PostDebugMessage(string.Format( + "{0}: refreshed field {1}.", + this.GetType().Name, + fieldinfo.Name + )); + } + } + + this.lastUpdate = VOID_Core.Instance.updateTimer; + } + } public override void DrawGUI() { + GUI.skin = VOID_Core.Instance.Skin; + Rect _Pos = this.WindowPos; _Pos = GUILayout.Window( --- a/VOID_Orbital.cs +++ b/VOID_Orbital.cs @@ -30,25 +30,119 @@ protected VOID_SaveValue toggleExtended = false; [AVOID_SaveValue("precisionValues")] - protected IntCollection precisionValues = new IntCollection(4, 230584300921369395); - - protected double orbitAltitude; - protected double orbitVelocity; - protected double orbitApoAlt; - protected double oribtPeriAlt; - protected string timeToApo; - protected string timeToPeri; - protected double orbitInclination; - protected double gravityAccel; - protected string orbitPeriod; - protected double semiMajorAxis; - protected double eccentricity; - protected double meanAnomaly; - protected double trueAnomaly; - protected double eccAnomaly; - protected double longitudeAscNode; - protected double argumentPeriapsis; - protected double localSiderealLongitude; + protected long _precisionValues = 230584300921369395; + protected IntCollection precisionValues; + + protected VOID_StrValue primaryName = new VOID_StrValue ( + VOIDLabels.void_primary, + new Func (() => VOID_Core.Instance.vessel.mainBody.name) + ); + + protected VOID_DoubleValue orbitAltitude = new VOID_DoubleValue ( + "Altitude (ASL)", + new Func (() => VOID_Core.Instance.vessel.orbit.altitude), + "m" + ); + + protected VOID_DoubleValue orbitVelocity = new VOID_DoubleValue ( + VOIDLabels.void_velocity, + new Func (() => VOID_Core.Instance.vessel.orbit.vel.magnitude), + "m/s" + ); + + protected VOID_DoubleValue orbitApoAlt = new VOID_DoubleValue( + VOIDLabels.void_apoapsis, + new Func(() => VOID_Core.Instance.vessel.orbit.ApA), + "m" + ); + + protected VOID_DoubleValue oribtPeriAlt = new VOID_DoubleValue( + VOIDLabels.void_periapsis, + new Func(() => VOID_Core.Instance.vessel.orbit.PeA), + "m" + ); + + protected VOID_StrValue timeToApo = new VOID_StrValue( + "Time to Apoapsis", + new Func(() => Tools.ConvertInterval(VOID_Core.Instance.vessel.orbit.timeToAp)) + ); + + protected VOID_StrValue timeToPeri = new VOID_StrValue( + "Time to Apoapsis", + new Func(() => Tools.ConvertInterval(VOID_Core.Instance.vessel.orbit.timeToPe)) + ); + + protected VOID_DoubleValue orbitInclination = new VOID_DoubleValue( + "Inclination", + new Func(() => VOID_Core.Instance.vessel.orbit.inclination), + "°" + ); + + protected VOID_DoubleValue gravityAccel = new VOID_DoubleValue( + "Gravity", + delegate() + { + double orbitRadius = VOID_Core.Instance.vessel.mainBody.Radius + + VOID_Core.Instance.vessel.mainBody.GetAltitude(VOID_Core.Instance.vessel.findWorldCenterOfMass()); + return (VOID_Core.Constant_G * VOID_Core.Instance.vessel.mainBody.Mass) / + Math.Pow(orbitRadius, 2); + }, + "m/s²" + ); + + protected VOID_StrValue orbitPeriod = new VOID_StrValue( + "Period", + new Func(() => Tools.ConvertInterval(VOID_Core.Instance.vessel.orbit.period)) + ); + + protected VOID_DoubleValue semiMajorAxis = new VOID_DoubleValue( + "Semi-Major Axis", + new Func(() => VOID_Core.Instance.vessel.orbit.semiMajorAxis), + "m" + ); + + protected VOID_DoubleValue eccentricity = new VOID_DoubleValue( + "Eccentricity", + new Func(() => VOID_Core.Instance.vessel.orbit.eccentricity), + "" + ); + + protected VOID_DoubleValue meanAnomaly = new VOID_DoubleValue( + "Mean Anomaly", + new Func(() => VOID_Core.Instance.vessel.orbit.meanAnomaly * 180d / Math.PI), + "°" + ); + + protected VOID_DoubleValue trueAnomaly = new VOID_DoubleValue( + "True Anomaly", + new Func(() => VOID_Core.Instance.vessel.orbit.trueAnomaly), + "°" + ); + + protected VOID_DoubleValue eccAnomaly = new VOID_DoubleValue( + "Eccentric Anomaly", + new Func(() => VOID_Core.Instance.vessel.orbit.eccentricAnomaly * 180d / Math.PI), + "°" + ); + + protected VOID_DoubleValue longitudeAscNode = new VOID_DoubleValue( + "Long. Ascending Node", + new Func(() => VOID_Core.Instance.vessel.orbit.LAN), + "°" + ); + + protected VOID_DoubleValue argumentPeriapsis = new VOID_DoubleValue( + "Argument of Periapsis", + new Func(() => VOID_Core.Instance.vessel.orbit.argumentOfPeriapsis), + "°" + ); + + protected VOID_DoubleValue localSiderealLongitude = new VOID_DoubleValue( + "Local Sidereal Longitude", + new Func(() => Tools.FixDegreeDomain( + VOID_Core.Instance.vessel.longitude + VOID_Core.Instance.vessel.orbit.referenceBody.rotationAngle)), + "°" + ); public VOID_Orbital() { @@ -60,197 +154,76 @@ public override void ModuleWindow(int _) { - if (VOID_Core.Instance.updateTimer >= this.lastUpdate + VOID_Core.Instance.updatePeriod) - { - this.lastUpdate = VOID_Core.Instance.updateTimer; - - this.orbitAltitude = vessel.orbit.altitude; - this.orbitVelocity = vessel.orbit.vel.magnitude; - this.orbitApoAlt = vessel.orbit.ApA; - this.oribtPeriAlt = vessel.orbit.PeA; - this.timeToApo = Tools.ConvertInterval(vessel.orbit.timeToAp); - this.timeToPeri = Tools.ConvertInterval(vessel.orbit.timeToPe); - this.orbitInclination = vessel.orbit.inclination; - - double orbitRadius = vessel.mainBody.Radius + vessel.mainBody.GetAltitude(vessel.findWorldCenterOfMass()); - this.gravityAccel = (VOID_Core.Constant_G * vessel.mainBody.Mass) / Math.Pow(orbitRadius, 2); - - this.orbitPeriod = Tools.ConvertInterval(vessel.orbit.period); - this.semiMajorAxis = vessel.orbit.semiMajorAxis; - this.eccentricity = vessel.orbit.eccentricity; - this.meanAnomaly = vessel.orbit.meanAnomaly * 180d / Math.PI; - this.trueAnomaly = vessel.orbit.trueAnomaly; - this.eccAnomaly = vessel.orbit.eccentricAnomaly * 180d / Math.PI; - this.longitudeAscNode = vessel.orbit.LAN; - this.argumentPeriapsis = vessel.orbit.argumentOfPeriapsis; - this.localSiderealLongitude = - Tools.FixDegreeDomain(vessel.longitude + vessel.orbit.referenceBody.rotationAngle); - } + base.ModuleWindow (_); int idx = 0; GUILayout.BeginVertical(); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(VOIDLabels.void_primary + ":"); - GUILayout.FlexibleSpace(); - GUILayout.Label(vessel.mainBody.bodyName, GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(VOIDLabels.void_altitude_asl + ":", GUILayout.ExpandWidth(true)); - GUILayout.FlexibleSpace(); - GUILayout.Label( - Tools.MuMech_ToSI(this.orbitAltitude, this.precisionValues[idx]) + "m", - GUILayout.ExpandWidth(false) - ); - if (GUILayout.Button ("P")) { - this.precisionValues [idx] = (ushort)((this.precisionValues[idx] + 3) % 15); - } - GUILayout.EndHorizontal(); - idx++; - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(VOIDLabels.void_velocity + ":"); - GUILayout.FlexibleSpace(); - GUILayout.Label(Tools.MuMech_ToSI(this.orbitVelocity, this.precisionValues [idx]) + "m/s", GUILayout.ExpandWidth(false)); - - if (GUILayout.Button ("P")) { - this.precisionValues [idx] = (ushort)((this.precisionValues[idx] + 3) % 15); - } - GUILayout.EndHorizontal(); - idx++; - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(VOIDLabels.void_apoapsis + ":"); - GUILayout.FlexibleSpace(); - GUILayout.Label(Tools.MuMech_ToSI(this.orbitApoAlt, this.precisionValues [idx]) + "m", GUILayout.ExpandWidth(false)); - - if (GUILayout.Button ("P")) { - this.precisionValues [idx] = (ushort)((this.precisionValues[idx] + 3) % 15); - } - GUILayout.EndHorizontal(); - idx++; - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Time to Ap:"); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.timeToApo, GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(VOIDLabels.void_periapsis + ":"); - GUILayout.FlexibleSpace(); - GUILayout.Label( - Tools.MuMech_ToSI(this.oribtPeriAlt, this.precisionValues [idx]) + "m", - GUILayout.ExpandWidth(false) - ); - - if (GUILayout.Button ("P")) { - this.precisionValues [idx] = (ushort)((this.precisionValues[idx] + 3) % 15); - } - GUILayout.EndHorizontal(); - idx++; - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Time to Pe:"); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.timeToPeri, GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Inclination:"); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.orbitInclination.ToString("F3") + "°", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Gravity:"); - GUILayout.FlexibleSpace(); - GUILayout.Label( - Tools.MuMech_ToSI(gravityAccel, this.precisionValues[idx]) + "m/s²", - GUILayout.ExpandWidth(false) - ); - - if (GUILayout.Button ("P")) { - this.precisionValues [idx] = (ushort)((this.precisionValues[idx] + 3) % 15); - } - GUILayout.EndHorizontal(); + this.primaryName.DoGUIHorizontal (); + + this.precisionValues [idx]= (ushort)this.orbitAltitude.DoGUIHorizontal (this.precisionValues [idx]); + idx++; + + this.precisionValues [idx]= (ushort)this.orbitVelocity.DoGUIHorizontal (this.precisionValues [idx]); + idx++; + + this.precisionValues [idx]= (ushort)this.orbitApoAlt.DoGUIHorizontal (this.precisionValues [idx]); + idx++; + + this.timeToApo.DoGUIHorizontal(); + + this.precisionValues [idx]= (ushort)this.oribtPeriAlt.DoGUIHorizontal (this.precisionValues [idx]); + idx++; + + this.timeToPeri.DoGUIHorizontal(); + + this.orbitInclination.DoGUIHorizontal("F3"); + + this.precisionValues [idx]= (ushort)this.gravityAccel.DoGUIHorizontal (this.precisionValues [idx]); idx++; this.toggleExtended = GUILayout.Toggle(this.toggleExtended, "Extended info"); if (this.toggleExtended) { - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Period:"); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.orbitPeriod, GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Semi-major axis:"); - GUILayout.FlexibleSpace(); - GUILayout.Label( - Tools.MuMech_ToSI(this.semiMajorAxis, this.precisionValues [idx]) + "m", - GUILayout.ExpandWidth(false) - ); - - if (GUILayout.Button ("P")) { - this.precisionValues [idx] = (ushort)((this.precisionValues[idx] + 3) % 15); - } - GUILayout.EndHorizontal(); + this.orbitPeriod.DoGUIHorizontal(); + + this.precisionValues [idx]= (ushort)this.semiMajorAxis.DoGUIHorizontal (this.precisionValues [idx]); idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Eccentricity:"); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.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.FlexibleSpace(); - GUILayout.Label(this.meanAnomaly.ToString("F3") + "°", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("True anomaly:"); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.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.FlexibleSpace(); - GUILayout.Label(this.eccAnomaly.ToString("F3") + "°", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Long. ascending node:"); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.longitudeAscNode.ToString("F3") + "°", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Arg. of periapsis:"); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.argumentPeriapsis.ToString("F3") + "°", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - // Toadicus edit: added local sidereal longitude. - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Local Sidereal Longitude:"); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.localSiderealLongitude.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["right"]); - GUILayout.EndHorizontal(); + this.eccentricity.DoGUIHorizontal("F4"); + + this.meanAnomaly.DoGUIHorizontal("F3"); + + this.trueAnomaly.DoGUIHorizontal("F3"); + + this.eccAnomaly.DoGUIHorizontal("F3"); + + this.longitudeAscNode.DoGUIHorizontal("F3"); + + this.argumentPeriapsis.DoGUIHorizontal("F3"); + + this.localSiderealLongitude.DoGUIHorizontal("F3"); } GUILayout.EndVertical(); GUI.DragWindow(); } + + public override void LoadConfig () + { + base.LoadConfig (); + + this.precisionValues = new IntCollection (4, this._precisionValues); + } + + public override void _SaveToConfig (KSP.IO.PluginConfiguration config) + { + this._precisionValues = this.precisionValues.collection; + + base._SaveToConfig (config); + } } } --- a/VOID_Rendezvous.cs +++ b/VOID_Rendezvous.cs @@ -230,7 +230,7 @@ // 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.Label(LSL.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["right"]); GUILayout.EndHorizontal(); } } --- a/VOID_SurfAtmo.cs +++ b/VOID_SurfAtmo.cs @@ -26,6 +26,102 @@ { public class VOID_SurfAtmo : VOID_WindowModule { + [AVOID_SaveValue("precisionValues")] + protected long _precisionValues = 230584300921369395; + protected IntCollection precisionValues; + + protected VOID_DoubleValue trueAltitude = new VOID_DoubleValue( + "Altitude (true)", + delegate() + { + double alt_true = VOID_Core.Instance.vessel.orbit.altitude - VOID_Core.Instance.vessel.terrainAltitude; + // HACK: This assumes that on worlds with oceans, all water is fixed at 0 m, + // and water covers the whole surface at 0 m. + if (VOID_Core.Instance.vessel.terrainAltitude < 0 && VOID_Core.Instance.vessel.mainBody.ocean ) + alt_true = VOID_Core.Instance.vessel.orbit.altitude; + return alt_true; + }, + "m" + ); + + protected VOID_StrValue surfLatitude = new VOID_StrValue( + "Latitude", + new Func (() => Tools.GetLatitudeString(VOID_Core.Instance.vessel)) + ); + + protected VOID_StrValue surfLongitude = new VOID_StrValue( + "Longitude", + new Func (() => Tools.GetLongitudeString(VOID_Core.Instance.vessel)) + ); + + protected VOID_StrValue vesselHeading = new VOID_StrValue( + "Heading", + delegate() + { + double heading = Tools.MuMech_get_heading(VOID_Core.Instance.vessel); + string cardinal = Tools.get_heading_text(heading); + + return string.Format( + "{0}° {1}", + heading.ToString("F2"), + cardinal + ); + } + ); + + protected VOID_DoubleValue terrainElevation = new VOID_DoubleValue( + "Terrain elevation", + new Func (() => VOID_Core.Instance.vessel.terrainAltitude), + "m" + ); + + protected VOID_DoubleValue surfVelocity = new VOID_DoubleValue( + "Surface velocity", + new Func (() => VOID_Core.Instance.vessel.srf_velocity.magnitude), + "m/s" + ); + + protected VOID_DoubleValue vertVelocity = new VOID_DoubleValue( + "Vertical speed", + new Func (() => VOID_Core.Instance.vessel.verticalSpeed), + "m/s" + ); + + protected VOID_DoubleValue horzVelocity = new VOID_DoubleValue( + "Horizontal speed", + new Func (() => VOID_Core.Instance.vessel.horizontalSrfSpeed), + "m/s" + ); + + protected VOID_FloatValue temperature = new VOID_FloatValue( + "Temperature", + new Func (() => VOID_Core.Instance.vessel.flightIntegrator.getExternalTemperature()), + "°C" + ); + + protected VOID_DoubleValue atmDensity = new VOID_DoubleValue ( + "Atmosphere Density", + new Func (() => VOID_Core.Instance.vessel.atmDensity * 1000f), + "g/m³" + ); + + protected VOID_DoubleValue atmPressure = new VOID_DoubleValue ( + "Pressure", + new Func (() => VOID_Core.Instance.vessel.staticPressure), + "atm" + ); + + protected VOID_FloatValue atmLimit = new VOID_FloatValue( + "Atmosphere Limit", + new Func (() => VOID_Core.Instance.vessel.mainBody.maxAtmosphereAltitude), + "m" + ); + + protected VOID_StrValue currBiome = new VOID_StrValue( + "Biome", + new Func (() => Tools.Toadicus_GetAtt(VOID_Core.Instance.vessel).name) + ); + public VOID_SurfAtmo() { this._Name = "Surface & Atmospheric Information"; @@ -36,79 +132,61 @@ public override void ModuleWindow(int _) { + base.ModuleWindow (_); + + int idx = 0; + GUILayout.BeginVertical(); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Altitude (true):"); - double alt_true = vessel.orbit.altitude - vessel.terrainAltitude; - // HACK: This assumes that on worlds with oceans, all water is fixed at 0 m, and water covers the whole surface at 0 m. - if (vessel.terrainAltitude < 0 && vessel.mainBody.ocean ) alt_true = vessel.orbit.altitude; - GUILayout.Label(Tools.MuMech_ToSI(alt_true) + "m", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal (); + this.precisionValues [idx]= (ushort)this.trueAltitude.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Latitude:"); - GUILayout.Label(Tools.GetLatitudeString(vessel), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.surfLatitude.DoGUIHorizontal (); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Longitude:"); - GUILayout.Label(Tools.GetLongitudeString(vessel), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.surfLongitude.DoGUIHorizontal (); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Heading:"); - GUILayout.Label(Tools.MuMech_get_heading(vessel).ToString("F2") + "° " + Tools.get_heading_text(Tools.MuMech_get_heading(vessel)), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.vesselHeading.DoGUIHorizontal (); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Terrain elevation:"); - GUILayout.Label(Tools.MuMech_ToSI(vessel.terrainAltitude) + "m", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.precisionValues [idx]= (ushort)this.terrainElevation.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Surface velocity:"); - GUILayout.Label(Tools.MuMech_ToSI(vessel.srf_velocity.magnitude) + "m/s", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.precisionValues [idx]= (ushort)this.surfVelocity.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Vertical speed:"); - GUILayout.Label(Tools.MuMech_ToSI(vessel.verticalSpeed) + "m/s", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.precisionValues [idx]= (ushort)this.vertVelocity.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Horizontal speed:"); - GUILayout.Label(Tools.MuMech_ToSI(vessel.horizontalSrfSpeed) + "m/s", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.precisionValues [idx]= (ushort)this.horzVelocity.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Temperature:"); - GUILayout.Label(vessel.flightIntegrator.getExternalTemperature().ToString("F2") + "° C", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.temperature.DoGUIHorizontal ("F2"); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Atmosphere density:"); - GUILayout.Label(Tools.MuMech_ToSI(vessel.atmDensity * 1000) + "g/m³", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.atmDensity.DoGUIHorizontal (3); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Pressure:"); - GUILayout.Label(vessel.staticPressure.ToString("F2") + " atms", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.atmPressure.DoGUIHorizontal ("F2"); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Atmosphere limit:"); - GUILayout.Label("≈ " + Tools.MuMech_ToSI(vessel.mainBody.maxAtmosphereAltitude) + "m", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.precisionValues [idx]= (ushort)this.atmLimit.DoGUIHorizontal (this.precisionValues [idx]); + idx++; // Toadicus edit: added Biome - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Biome:"); - GUILayout.Label(Tools.Toadicus_GetAtt(vessel).name, VOID_Core.Instance.LabelStyles["txt_right"]); - GUILayout.EndHorizontal(); + this.currBiome.DoGUIHorizontal (); GUILayout.EndVertical(); GUI.DragWindow(); } + + public override void LoadConfig () + { + base.LoadConfig (); + + this.precisionValues = new IntCollection (4, this._precisionValues); + } + + public override void _SaveToConfig (KSP.IO.PluginConfiguration config) + { + this._precisionValues = this.precisionValues.collection; + + base._SaveToConfig (config); + } } } --- a/VOID_VesselInfo.cs +++ b/VOID_VesselInfo.cs @@ -20,7 +20,9 @@ // along with this program. If not, see . using KSP; using System; +using System.Collections.Generic; using UnityEngine; +using Engineer.VesselSimulator; namespace VOID { @@ -29,7 +31,130 @@ [AVOID_SaveValue("toggleExtended")] protected VOID_SaveValue toggleExtended = false; - public VOID_VesselInfo() + protected VOID_DoubleValue geeForce = new VOID_DoubleValue( + "G-force", + new Func(() => VOID_Core.Instance.vessel.geeForce), + "gees" + ); + + protected VOID_IntValue partCount = new VOID_IntValue( + "Parts", + new Func(() => VOID_Core.Instance.vessel.Parts.Count), + "" + ); + + protected VOID_DoubleValue totalMass = new VOID_DoubleValue( + "Total Mass", + new Func(() => VOID_Core.Instance.vessel.GetTotalMass()), + "tons" + ); + + protected VOID_DoubleValue resourceMass = new VOID_DoubleValue( + "Resource Mass", + delegate() + { + double rscMass = 0; + foreach (Part part in VOID_Core.Instance.vessel.Parts) + { + rscMass += part.GetResourceMass(); + } + return rscMass; + }, + "tons" + ); + + protected VOID_DoubleValue stageDeltaV = new VOID_DoubleValue( + "DeltaV (Current Stage)", + delegate() + { + if (SimManager.Instance.Stages == null || + SimManager.Instance.Stages.Length <= Staging.lastStage + ) + return double.NaN; + return SimManager.Instance.Stages[Staging.lastStage].deltaV; + }, + "m/s" + ); + + protected VOID_DoubleValue totalDeltaV = new VOID_DoubleValue( + "DeltaV (Total)", + delegate() + { + if (SimManager.Instance.Stages == null) + return double.NaN; + return SimManager.Instance.LastStage.totalDeltaV; + }, + "m/s" + ); + + protected VOID_FloatValue mainThrottle = new VOID_FloatValue( + "Throttle", + new Func(() => VOID_Core.Instance.vessel.ctrlState.mainThrottle * 100f), + "%" + ); + + protected VOID_StrValue currmaxThrust = new VOID_StrValue( + "Thrust (curr/max)", + delegate() + { + if (SimManager.Instance.Stages == null) + return "N/A"; + + double currThrust = SimManager.Instance.LastStage.actualThrust; + double maxThrust = SimManager.Instance.LastStage.thrust; + + return string.Format( + "{0} / {1}", + currThrust.ToString("F1"), + maxThrust.ToString("F1") + ); + } + ); + + protected VOID_StrValue currmaxThrustWeight = new VOID_StrValue( + "T:W (curr/max)", + delegate() + { + if (SimManager.Instance.Stages == null) + return "N/A"; + + double currThrust = SimManager.Instance.LastStage.actualThrust; + double maxThrust = SimManager.Instance.LastStage.thrust; + double mass = VOID_Core.Instance.vessel.GetTotalMass(); + double gravity = VOID_Core.Instance.vessel.mainBody.gravParameter / + Math.Pow( + VOID_Core.Instance.vessel.mainBody.Radius + VOID_Core.Instance.vessel.altitude, + 2 + ); + double weight = mass * gravity; + + return string.Format( + "{0} / {1}", + (currThrust / weight).ToString("F2"), + (maxThrust / weight).ToString("F2") + ); + } + ); + + protected VOID_DoubleValue surfaceThrustWeight = new VOID_DoubleValue( + "Max T:W @ surface", + delegate() + { + if (SimManager.Instance.Stages == null) + return double.NaN; + + double maxThrust = SimManager.Instance.LastStage.thrust; + double mass = VOID_Core.Instance.vessel.GetTotalMass(); + double gravity = (VOID_Core.Constant_G * VOID_Core.Instance.vessel.mainBody.Mass) / + Math.Pow(VOID_Core.Instance.vessel.mainBody.Radius, 2); + double weight = mass * gravity; + + return maxThrust / weight; + }, + "" + ); + + public VOID_VesselInfo() : base() { this._Name = "Vessel Information"; @@ -39,102 +164,41 @@ public override void ModuleWindow(int _) { + base.ModuleWindow (_); + if ((TimeWarp.WarpMode == TimeWarp.Modes.LOW) || (TimeWarp.CurrentRate <= TimeWarp.MaxPhysicsRate)) { - Engineer.VesselSimulator.SimManager.Instance.RequestSimulation(); + SimManager.Instance.RequestSimulation(); } - Engineer.VesselSimulator.Stage[] stages = Engineer.VesselSimulator.SimManager.Instance.Stages; + Stage[] stages = SimManager.Instance.Stages; GUILayout.BeginVertical(); - GUILayout.Label(vessel.vesselName, VOID_Core.Instance.LabelStyles["center_bold"], GUILayout.ExpandWidth(true)); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("G-force:"); - GUILayout.Label(vessel.geeForce.ToString("F2") + " gees", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - int num_parts = 0; - double total_mass = vessel.GetTotalMass(); - double resource_mass = 0; - double max_thrust = 0; - double final_thrust = 0; - - foreach (Part p in vessel.parts) - { - num_parts++; - resource_mass += p.GetResourceMass(); - - foreach (PartModule pm in p.Modules) - { - if ((pm.moduleName == "ModuleEngines") && ((p.State == PartStates.ACTIVE) || ((Staging.CurrentStage > Staging.lastStage) && (p.inverseStage == Staging.lastStage)))) - { - max_thrust += ((ModuleEngines)pm).maxThrust; - final_thrust += ((ModuleEngines)pm).finalThrust; - } - } - } - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Parts:"); - GUILayout.Label(num_parts.ToString("F0"), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Total mass:"); - GUILayout.Label(total_mass.ToString("F1") + " tons", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Resource mass:"); - GUILayout.Label(resource_mass.ToString("F1") + " tons", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - if (stages.Length > Staging.lastStage) - { - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("DeltaV (Current Stage):"); - GUILayout.Label(Tools.MuMech_ToSI(stages[Staging.lastStage].deltaV).ToString() + "m/s", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - } - - if (stages.Length > 0) - { - double totalDeltaV = 0d; - - for (int i = 0; i < stages.Length; ++i) - { - totalDeltaV += stages [i].deltaV; - } - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("DeltaV (Total):"); - GUILayout.Label(Tools.MuMech_ToSI(totalDeltaV).ToString() + "m/s", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - } - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Throttle:"); - GUILayout.Label((vessel.ctrlState.mainThrottle * 100f).ToString("F0") + "%", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Thrust (curr/max):"); - GUILayout.Label(final_thrust.ToString("F1") + " / " + max_thrust.ToString("F1") + " kN", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - double gravity = vessel.mainBody.gravParameter / Math.Pow(vessel.mainBody.Radius + vessel.altitude, 2); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("T:W (curr/max):"); - GUILayout.Label((final_thrust / (total_mass * gravity)).ToString("F2") + " / " + (max_thrust / (total_mass * gravity)).ToString("F2"), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - double g_ASL = (VOID_Core.Constant_G * vessel.mainBody.Mass) / Math.Pow(vessel.mainBody.Radius, 2); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Max T:W @ surface:"); - GUILayout.Label((max_thrust / (total_mass * g_ASL)).ToString("F2"), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + GUILayout.Label( + vessel.vesselName, + VOID_Core.Instance.LabelStyles["center_bold"], + GUILayout.ExpandWidth(true)); + + this.geeForce.DoGUIHorizontal ("F2"); + + this.partCount.DoGUIHorizontal (); + + this.totalMass.DoGUIHorizontal ("F1"); + + this.resourceMass.DoGUIHorizontal ("F1"); + + this.stageDeltaV.DoGUIHorizontal (3, false); + + this.totalDeltaV.DoGUIHorizontal (3, false); + + this.mainThrottle.DoGUIHorizontal ("F0"); + + this.currmaxThrust.DoGUIHorizontal (); + + this.currmaxThrustWeight.DoGUIHorizontal (); + + this.surfaceThrustWeight.DoGUIHorizontal ("F2"); GUILayout.EndVertical(); GUI.DragWindow();