VOID_Orbital: changed up windowID to pull from the new incrementing accessor, moved _Name into the ctor, which still bugs me.
--- a/IVOID_Module.cs
+++ b/IVOID_Module.cs
@@ -25,7 +25,6 @@
public interface IVOID_Module
{
string Name { get; }
- bool hasConfigurables { get; }
bool toggleActive { get; set; }
bool guiRunning { get; }
--- 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_Core.cs
+++ b/VOID_Core.cs
@@ -55,6 +55,8 @@
}
}
+ public static double Constant_G = 6.674e-11;
+
/*
* Fields
* */
@@ -90,6 +92,11 @@
protected string VOIDIconOffPath = "VOID/Textures/void_icon_off";
protected int windowBaseID = -96518722;
+ protected int _windowID = 0;
+
+ protected bool GUIStylesLoaded = false;
+
+ protected Dictionary<string, GUIStyle> _LabelStyles = new Dictionary<string, GUIStyle>();
[AVOID_SaveValue("togglePower")]
public VOID_SaveValue<bool> togglePower = true;
@@ -135,11 +142,23 @@
}
}
- public Vessel vessel
+ public int windowID
{
get
{
- return FlightGlobals.ActiveVessel;
+ if (this._windowID == 0)
+ {
+ this._windowID = this.windowBaseID;
+ }
+ return this._windowID++;
+ }
+ }
+
+ public Dictionary<string, GUIStyle> LabelStyles
+ {
+ get
+ {
+ return this._LabelStyles;
}
}
@@ -261,6 +280,24 @@
this.powerAvailable = false;
}
}
+ }
+
+ protected void LoadGUIStyles()
+ {
+ this.LabelStyles["center"] = new GUIStyle(GUI.skin.label);
+ this.LabelStyles["center"].normal.textColor = Color.white;
+ this.LabelStyles["center"].alignment = TextAnchor.UpperCenter;
+
+ this.LabelStyles["center_bold"] = new GUIStyle(GUI.skin.label);
+ this.LabelStyles["center_bold"].normal.textColor = Color.white;
+ this.LabelStyles["center_bold"].alignment = TextAnchor.UpperCenter;
+ this.LabelStyles["center_bold"].fontStyle = FontStyle.Bold;
+
+ this.LabelStyles["txt_right"] = new GUIStyle(GUI.skin.label);
+ this.LabelStyles["txt_right"].normal.textColor = Color.white;
+ this.LabelStyles["txt_right"].alignment = TextAnchor.UpperRight;
+
+ this.GUIStylesLoaded = true;
}
public void VOIDMainWindow(int _)
@@ -321,9 +358,14 @@
this.LoadModules ();
}
+ this._windowID = this.windowBaseID;
+
GUI.skin = this.Skin;
- int windowID = this.windowBaseID;
+ if (!this.GUIStylesLoaded)
+ {
+ this.LoadGUIStyles ();
+ }
this.VOIDIconTexture = this.VOIDIconOff; //icon off default
if (this.togglePower) this.VOIDIconTexture = this.VOIDIconOn; //or on if power_toggle==true
@@ -337,7 +379,7 @@
Rect _mainWindowPos = this.mainWindowPos;
_mainWindowPos = GUILayout.Window (
- ++windowID,
+ this.windowID,
_mainWindowPos,
this.VOIDMainWindow,
string.Join (" ", new string[] {this.VoidName, this.VoidVersion}),
@@ -356,7 +398,7 @@
Rect _configWindowPos = this.configWindowPos;
_configWindowPos = GUILayout.Window (
- ++windowID,
+ this.windowID,
_configWindowPos,
this.VOIDConfigWindow,
string.Join (" ", new string[] {this.VoidName, "Configuration"}),
--- a/VOID_HUD.cs
+++ b/VOID_HUD.cs
@@ -41,8 +41,6 @@
protected GUIStyle labelStyle;
- protected Vessel vessel = null;
-
/*
* Properties
* */
@@ -70,6 +68,7 @@
public VOID_HUD() : base()
{
this._Name = "Heads-Up Display";
+
this.textColors.Add(Color.green);
this.textColors.Add(Color.black);
this.textColors.Add(Color.white);
@@ -92,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)
@@ -108,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
--- a/VOID_Module.cs
+++ b/VOID_Module.cs
@@ -33,21 +33,12 @@
[AVOID_SaveValue("Active")]
protected VOID_SaveValue<bool> _Active = true;
protected bool _Running = false;
- protected bool _hasConfigurables = false;
protected string _Name;
/*
* Properties
* */
- public virtual bool hasConfigurables
- {
- get
- {
- return this._hasConfigurables;
- }
- }
-
public virtual bool toggleActive
{
get
@@ -73,6 +64,14 @@
get
{
return this._Name;
+ }
+ }
+
+ public virtual Vessel vessel
+ {
+ get
+ {
+ return FlightGlobals.ActiveVessel;
}
}
--- /dev/null
+++ b/VOID_Orbital.cs
@@ -1,1 +1,164 @@
+//
+// 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 <http://www.gnu.org/licenses/>.
+using KSP;
+using System;
+using UnityEngine;
+namespace VOID
+{
+ public class VOID_Orbital : VOID_Module
+ {
+ [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_Orbital()
+ {
+ this._Name = "Orbital Information";
+ }
+
+ 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));
+ }
+ }
+}
+
+