--- a/VOID_Rendezvous.cs +++ b/VOID_Rendezvous.cs @@ -1,27 +1,37 @@ -// -// 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/>. +// VOID +// +// VOID_Rendezvous.cs +// +// Copyright © 2014, toadicus +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 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. +// +// 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 System.Collections.Generic; -using System.Linq; +using ToadicusTools; +using ToadicusTools.GUIUtils; +using ToadicusTools.Text; using UnityEngine; namespace VOID @@ -29,43 +39,56 @@ public class VOID_Rendezvous : VOID_WindowModule { [AVOID_SaveValue("untoggleRegisterInfo")] - protected VOID_SaveValue<bool> untoggleRegisterInfo = false; + protected VOID_SaveValue<bool> untoggleRegisterInfo; [AVOID_SaveValue("toggleExtendedOrbital")] - protected VOID_SaveValue<bool> toggleExtendedOrbital = false; + protected VOID_SaveValue<bool> toggleExtendedOrbital; protected VOID_VesselRegister RegisterModule; public VOID_Rendezvous() { - this._Name = "Rendezvous Information"; + this.Name = "Rendezvous Information"; this.WindowPos.x = 845; this.WindowPos.y = 85; + + this.untoggleRegisterInfo = (VOID_SaveValue<bool>)false; + this.toggleExtendedOrbital = (VOID_SaveValue<bool>)false; } - public override void ModuleWindow(int _) + public override void ModuleWindow(int id) { - Vessel rendezvessel = new Vessel(); - CelestialBody rendezbody = new CelestialBody(); - - this.RegisterModule = VOID_Core.Instance.Modules.Where(m => typeof(VOID_VesselRegister).IsAssignableFrom(m.GetType())).FirstOrDefault() as VOID_VesselRegister; + Vessel rendezvessel; + CelestialBody rendezbody; + + if (this.RegisterModule == null) + { + for (int idx = 0; idx < this.core.Modules.Count; idx++) + { + if (this.core.Modules[idx] is VOID_VesselRegister) + { + this.RegisterModule = this.core.Modules[idx] as VOID_VesselRegister; + break; + } + } + } GUILayout.BeginVertical(); //display both //Show Target Info - GUILayout.Label("Target:", VOID_Core.Instance.LabelStyles["center_bold"]); + GUILayout.Label("Target:", VOID_Styles.labelCenterBold); if (FlightGlobals.fetch.VesselTarget != null) { //a KSP Target (body or vessel) is selected - if (FlightGlobals.fetch.vesselTargetMode == FlightGlobals.VesselTargetModes.Direction) + if (FlightGlobals.fetch.vesselTargetMode == VesselTargetModes.Direction) { //a Body is selected - rendezbody = vessel.patchedConicSolver.targetBody; + rendezbody = Vessel.patchedConicSolver.targetBody; display_rendezvous_info(null, rendezbody); } - else if (FlightGlobals.fetch.vesselTargetMode == FlightGlobals.VesselTargetModes.DirectionAndVelocity) + else if (FlightGlobals.fetch.vesselTargetMode == VesselTargetModes.DirectionAndVelocity) { //a Vessel is selected rendezvessel = FlightGlobals.fetch.VesselTarget.GetVessel(); @@ -75,20 +98,20 @@ if (GUILayout.Button("Unset Target", GUILayout.ExpandWidth(false))) { FlightGlobals.fetch.SetVesselTarget(null); - Tools.PostDebugMessage("VOID_Rendezvous: KSP Target set to null"); + Logging.PostDebugMessage("VOID_Rendezvous: KSP Target set to null"); } } else { //no KSP Target selected - GUILayout.Label("No Target Selected", VOID_Core.Instance.LabelStyles["center_bold"]); + GUILayout.Label("No Target Selected", VOID_Styles.labelCenterBold); } //Show Vessel Register vessel info if (untoggleRegisterInfo == false && this.RegisterModule != default(IVOID_Module)) { - GUILayout.Label("Vessel Register:", VOID_Core.Instance.LabelStyles["center_bold"]); + GUILayout.Label("Vessel Register:", VOID_Styles.labelCenterBold); if (this.RegisterModule.selectedVessel != null) { rendezvessel = this.RegisterModule.selectedVessel; @@ -102,7 +125,7 @@ if (GUILayout.Button("Set Target", GUILayout.ExpandWidth(false))) { FlightGlobals.fetch.SetVesselTarget(rendezvessel); - Tools.PostDebugMessage("[VOID] KSP Target set to " + rendezvessel.vesselName); + Logging.PostDebugMessage("[VOID] KSP Target set to " + rendezvessel.vesselName); } } } @@ -110,19 +133,20 @@ { //vesreg Vessel is null //targ = null; - GUILayout.Label("No Vessel Selected", VOID_Core.Instance.LabelStyles["center_bold"]); - } - } - - untoggleRegisterInfo.value = GUILayout.Toggle(untoggleRegisterInfo, "Hide Vessel Register Info"); + GUILayout.Label("No Vessel Selected", VOID_Styles.labelCenterBold); + } + } + + untoggleRegisterInfo.value = Layout.Toggle(untoggleRegisterInfo, "Hide Vessel Register Info"); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label(" ", GUILayout.ExpandWidth(true)); - if (GUILayout.Button("Close", GUILayout.ExpandWidth(false))) this._Active = false; + if (GUILayout.Button("Close", GUILayout.ExpandWidth(false))) this.Active = false; GUILayout.EndHorizontal(); GUILayout.EndVertical(); - GUI.DragWindow(); + + base.ModuleWindow(id); } private void display_rendezvous_info(Vessel v, CelestialBody cb) @@ -131,7 +155,7 @@ { //Display vessel rendezvous info GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); - GUILayout.Label(v.vesselName, VOID_Core.Instance.LabelStyles["center_bold"], GUILayout.ExpandWidth(true)); + GUILayout.Label(v.vesselName, VOID_Styles.labelCenterBold, GUILayout.ExpandWidth(true)); GUILayout.EndHorizontal(); if (v.situation == Vessel.Situations.ESCAPING || v.situation == Vessel.Situations.FLYING || v.situation == Vessel.Situations.ORBITING || v.situation == Vessel.Situations.SUB_ORBITAL) @@ -139,17 +163,17 @@ // Toadicus edit: added local sidereal longitude. // Toadicus edit: added local sidereal longitude. double LSL = v.longitude + v.orbit.referenceBody.rotationAngle; - LSL = Tools.FixDegreeDomain (LSL); + LSL = VOID_Tools.FixDegreeDomain (LSL); //display orbital info for orbiting/flying/suborbital/escaping vessels only GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Ap/Pe:"); - GUILayout.Label(Tools.MuMech_ToSI(v.orbit.ApA) + "m / " + Tools.MuMech_ToSI(v.orbit.PeA) + "m", GUILayout.ExpandWidth(false)); + GUILayout.Label(SIFormatProvider.ToSI(v.orbit.ApA, 3) + "m / " + SIFormatProvider.ToSI(v.orbit.PeA, 3) + "m", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Altitude:"); - GUILayout.Label(Tools.MuMech_ToSI(v.orbit.altitude) + "m", GUILayout.ExpandWidth(false)); + GUILayout.Label(SIFormatProvider.ToSI(v.orbit.altitude, 3) + "m", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); @@ -157,37 +181,43 @@ GUILayout.Label(v.orbit.inclination.ToString("F3") + "°", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); - if (vessel.mainBody == v.mainBody) + if (Vessel.mainBody == v.mainBody) { GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Relative inclination:"); - GUILayout.Label(Vector3d.Angle(vessel.orbit.GetOrbitNormal(), v.orbit.GetOrbitNormal()).ToString("F3") + "°", GUILayout.ExpandWidth(false)); + GUILayout.Label(Vector3.Angle(Vessel.orbit.GetOrbitNormal(), v.orbit.GetOrbitNormal()).ToString("F3") + "°", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); } //if (debugging) Debug.Log("[CHATR] v -> v relative incl OK"); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Velocity:"); - GUILayout.Label(Tools.MuMech_ToSI(v.orbit.vel.magnitude) + "m/s", GUILayout.ExpandWidth(false)); + GUILayout.Label(SIFormatProvider.ToSI(v.orbit.vel.magnitude, 3) + "m/s", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Relative velocity:"); - GUILayout.Label(Tools.MuMech_ToSI(v.orbit.vel.magnitude - vessel.orbit.vel.magnitude) + "m/s", GUILayout.ExpandWidth(false)); + GUILayout.Label(SIFormatProvider.ToSI(v.orbit.vel.magnitude - Vessel.orbit.vel.magnitude, 3) + "m/s", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Distance:"); - GUILayout.Label(Tools.MuMech_ToSI((vessel.findWorldCenterOfMass() - v.findWorldCenterOfMass()).magnitude) + "m", GUILayout.ExpandWidth(false)); - GUILayout.EndHorizontal(); - - //target_vessel_extended_orbital_info = GUILayout.Toggle(target_vessel_extended_orbital_info, "Extended info"); + GUILayout.Label(SIFormatProvider.ToSI((Vessel.findWorldCenterOfMass() - v.findWorldCenterOfMass()).magnitude, 3) + "m", 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_Styles.labelRight); + GUILayout.EndHorizontal(); + + toggleExtendedOrbital.value = Layout.Toggle(toggleExtendedOrbital, "Extended info"); if (toggleExtendedOrbital) { GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Period:"); - GUILayout.Label(Tools.ConvertInterval(v.orbit.period), GUILayout.ExpandWidth(false)); + GUILayout.Label(VOID_Tools.FormatInterval(v.orbit.period), GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); @@ -226,40 +256,34 @@ GUILayout.Label("Arg. of periapsis:"); GUILayout.Label(v.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["right"]); - GUILayout.EndHorizontal(); } } else { GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Latitude:"); - GUILayout.Label(Tools.GetLatitudeString(vessel), GUILayout.ExpandWidth(false)); + GUILayout.Label(VOID_Tools.GetLatitudeString(Vessel), GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Longitude:"); - GUILayout.Label(Tools.GetLongitudeString(vessel), GUILayout.ExpandWidth(false)); + GUILayout.Label(VOID_Tools.GetLongitudeString(Vessel), GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Distance:"); - GUILayout.Label(Tools.MuMech_ToSI((vessel.findWorldCenterOfMass() - v.findWorldCenterOfMass()).magnitude) + "m", GUILayout.ExpandWidth(false)); + GUILayout.Label(SIFormatProvider.ToSI((Vessel.findWorldCenterOfMass() - v.findWorldCenterOfMass()).magnitude, 3) + "m", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); } } else if (cb != null && v == null) { //Display CelstialBody rendezvous info - GUILayout.Label(cb.bodyName, VOID_Core.Instance.LabelStyles["center_bold"]); + GUILayout.Label(cb.bodyName, VOID_Styles.labelCenterBold); GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Ap/Pe:"); - GUILayout.Label(Tools.MuMech_ToSI(cb.orbit.ApA) + "m / " + Tools.MuMech_ToSI(cb.orbit.PeA) + "m", GUILayout.ExpandWidth(false)); + GUILayout.Label(SIFormatProvider.ToSI(cb.orbit.ApA, 3) + "m / " + SIFormatProvider.ToSI(cb.orbit.PeA, 3) + "m", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); //if (debugging) Debug.Log("[VOID] Ap/Pe OK"); @@ -269,47 +293,47 @@ GUILayout.EndHorizontal(); //if (debugging) Debug.Log("[VOID] Inclination OK"); - if (cb.referenceBody == vessel.mainBody) + if (cb.referenceBody == Vessel.mainBody) { GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Relative inclination:"); - GUILayout.Label(Vector3d.Angle(vessel.orbit.GetOrbitNormal(), cb.orbit.GetOrbitNormal()).ToString("F3") + "°", GUILayout.ExpandWidth(false)); + GUILayout.Label(Vector3.Angle(Vessel.orbit.GetOrbitNormal(), cb.orbit.GetOrbitNormal()).ToString("F3") + "°", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); //if (debugging) Debug.Log("[VOID] cb Relative inclination OK"); } GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Distance:"); - GUILayout.Label(Tools.MuMech_ToSI((vessel.mainBody.position - cb.position).magnitude) + "m", GUILayout.ExpandWidth(false)); + GUILayout.Label(SIFormatProvider.ToSI((Vessel.mainBody.position - cb.position).magnitude, 3) + "m", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); //if (debugging) Debug.Log("[VOID] Distance OK"); //SUN2PLANET: - if (vessel.mainBody.bodyName == "Sun" && cb.referenceBody == vessel.mainBody) - { - Tools.display_transfer_angles_SUN2PLANET(cb, vessel); + if (Vessel.mainBody.bodyName == "Sun" && cb.referenceBody == Vessel.mainBody) + { + VOID_Tools.display_transfer_angles_SUN2PLANET(cb, Vessel); //if (debugging) Debug.Log("[VOID] SUN2PLANET OK"); } //PLANET2PLANET - else if (vessel.mainBody.referenceBody.bodyName == "Sun" && cb.referenceBody == vessel.mainBody.referenceBody) - { - Tools.display_transfer_angles_PLANET2PLANET(cb, vessel); + else if (Vessel.mainBody.referenceBody.bodyName == "Sun" && cb.referenceBody == Vessel.mainBody.referenceBody) + { + VOID_Tools.display_transfer_angles_PLANET2PLANET(cb, Vessel); //if (debugging) Debug.Log("[VOID] PLANET2PLANET OK"); } //PLANET2MOON - else if (vessel.mainBody.referenceBody.bodyName == "Sun" && cb.referenceBody == vessel.mainBody) - { - Tools.display_transfer_angles_PLANET2MOON(cb, vessel); + else if (Vessel.mainBody.referenceBody.bodyName == "Sun" && cb.referenceBody == Vessel.mainBody) + { + VOID_Tools.display_transfer_angles_PLANET2MOON(cb, Vessel); //if (debugging) Debug.Log("[VOID] PLANET2MOON OK"); } //MOON2MOON - else if (vessel.mainBody.referenceBody.referenceBody.bodyName == "Sun" && cb.referenceBody == vessel.mainBody.referenceBody) - { - Tools.display_transfer_angles_MOON2MOON(cb, vessel); + else if (Vessel.mainBody.referenceBody.referenceBody.bodyName == "Sun" && cb.referenceBody == Vessel.mainBody.referenceBody) + { + VOID_Tools.display_transfer_angles_MOON2MOON(cb, Vessel); //if (debugging) Debug.Log("[VOID] MOON2MOON OK"); }