--- a/VOID_Orbital.cs +++ b/VOID_Orbital.cs @@ -1,170 +1,124 @@ +// VOID // -// VOID_Orbital.cs +// VOID_Orbital.cs // -// Author: -// toadicus <> +// Copyright © 2014, toadicus +// All rights reserved. // -// Copyright (c) 2013 toadicus +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: // -// This program is free software: you can redistribute it and/or modify -// 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. +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. // -// 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. +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. // -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. +// 3. Neither the name of the copyright holder nor the names of its contributors may be used +// to endorse or promote products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + using KSP; using System; +using ToadicusTools; using UnityEngine; namespace VOID { - public class VOID_Orbital : VOID_Module + public class VOID_Orbital : VOID_WindowModule { - [AVOID_SaveValue("WindowPos")] - protected Rect WindowPos = new Rect(Screen.width / 2, Screen.height / 2, 10f, 10f); - [AVOID_SaveValue("toggleExtended")] protected VOID_SaveValue<bool> toggleExtended = false; + [AVOID_SaveValue("precisionValues")] + protected long _precisionValues = 230584300921369395; + protected IntCollection precisionValues; + public VOID_Orbital() { - this._Name = "Orbital Information"; + this.Name = "Orbital Information"; + + this.WindowPos.x = Screen.width - 520f; + this.WindowPos.y = 250f; } - public void ModuleWindow(int _) + public override void ModuleWindow(int _) { - // Toadicus edit: added local sidereal longitude. - double LSL = vessel.longitude + vessel.orbit.referenceBody.rotationAngle; - LSL = Tools.FixDegreeDomain (LSL); + int idx = 0; GUILayout.BeginVertical(); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(VOIDLabels.void_primary + ":"); - GUILayout.Label(vessel.mainBody.bodyName, GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + VOID_Data.primaryName.DoGUIHorizontal (); - 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(); + this.precisionValues [idx]= (ushort)VOID_Data.orbitAltitude.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - 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(); + this.precisionValues [idx]= (ushort)VOID_Data.orbitVelocity.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(VOIDLabels.void_apoapsis + ":"); - GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.ApA) + "m", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.precisionValues [idx]= (ushort)VOID_Data.orbitApoAlt.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Time to Ap:"); - GUILayout.Label(Tools.ConvertInterval(vessel.orbit.timeToAp), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + VOID_Data.timeToApo.DoGUIHorizontal(); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(VOIDLabels.void_periapsis + ":"); - GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.PeA) + "m", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.precisionValues [idx]= (ushort)VOID_Data.oribtPeriAlt.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Time to Pe:"); - GUILayout.Label(Tools.ConvertInterval(vessel.orbit.timeToPe), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + VOID_Data.timeToPeri.DoGUIHorizontal(); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Inclination:"); - GUILayout.Label(vessel.orbit.inclination.ToString("F3") + "°", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + VOID_Data.orbitInclination.DoGUIHorizontal("F3"); - 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(); + this.precisionValues [idx]= (ushort)VOID_Data.gravityAccel.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - this.toggleExtended = GUILayout.Toggle(this.toggleExtended, "Extended info"); + this.toggleExtended.value = GUILayout.Toggle(this.toggleExtended, "Extended info"); if (this.toggleExtended) { - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Period:"); - GUILayout.Label(Tools.ConvertInterval(vessel.orbit.period), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + VOID_Data.orbitPeriod.DoGUIHorizontal(); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Semi-major axis:"); - GUILayout.Label((vessel.orbit.semiMajorAxis / 1000).ToString("##,#") + "km", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + this.precisionValues [idx]= (ushort)VOID_Data.semiMajorAxis.DoGUIHorizontal (this.precisionValues [idx]); + idx++; - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Eccentricity:"); - GUILayout.Label(vessel.orbit.eccentricity.ToString("F4"), GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + VOID_Data.eccentricity.DoGUIHorizontal("F4"); - // 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(); + VOID_Data.meanAnomaly.DoGUIHorizontal("F3"); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("True anomaly:"); - GUILayout.Label(vessel.orbit.trueAnomaly.ToString("F3") + "°", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + VOID_Data.trueAnomaly.DoGUIHorizontal("F3"); - // 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(); + VOID_Data.eccAnomaly.DoGUIHorizontal("F3"); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Long. ascending node:"); - GUILayout.Label(vessel.orbit.LAN.ToString("F3") + "°", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + VOID_Data.longitudeAscNode.DoGUIHorizontal("F3"); - GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label("Arg. of periapsis:"); - GUILayout.Label(vessel.orbit.argumentOfPeriapsis.ToString("F3") + "°", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); + VOID_Data.argumentPeriapsis.DoGUIHorizontal("F3"); - // 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(); + VOID_Data.localSiderealLongitude.DoGUIHorizontal("F3"); } GUILayout.EndVertical(); GUI.DragWindow(); } - public override void DrawGUI() + public override void LoadConfig () { - Rect _Pos = this.WindowPos; + base.LoadConfig (); - _Pos = GUILayout.Window( - VOID_Core.Instance.windowID, - _Pos, - this.ModuleWindow, - this.Name, GUILayout.Width(250), - GUILayout.Height(50)); + this.precisionValues = new IntCollection (4, this._precisionValues); + } - if (_Pos != this.WindowPos) - { - this.WindowPos = _Pos; - VOID_Core.Instance.configDirty = true; - } + public override void _SaveToConfig (KSP.IO.PluginConfiguration config) + { + this._precisionValues = this.precisionValues.collection; + + base._SaveToConfig (config); } } }