FAR support and burn times to delta-v readouts.
[VesselSimulator.git] / KerbalEngineer / Flight / Readouts / ReadoutLibrary.cs
blob:a/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs -> blob:b/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs
--- a/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs
+++ b/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs
@@ -1,198 +1,258 @@
-// 

-//     Kerbal Engineer Redux

-// 

-//     Copyright (C) 2014 CYBUTEK

-// 

-//     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/>.

-// 

-

-#region Using Directives

-

-using System.Collections.Generic;

-using System.Linq;

-

-using KerbalEngineer.Flight.Readouts.Misc;

-using KerbalEngineer.Flight.Readouts.Orbital;

-using KerbalEngineer.Flight.Readouts.Rendezvous;

-using KerbalEngineer.Flight.Readouts.Surface;

-using KerbalEngineer.Flight.Readouts.Vessel;

-using KerbalEngineer.Settings;

-

-using AltitudeSeaLevel = KerbalEngineer.Flight.Readouts.Surface.AltitudeSeaLevel;

-using ApoapsisHeight = KerbalEngineer.Flight.Readouts.Orbital.ApoapsisHeight;

-using OrbitalPeriod = KerbalEngineer.Flight.Readouts.Orbital.OrbitalPeriod;

-using PeriapsisHeight = KerbalEngineer.Flight.Readouts.Orbital.PeriapsisHeight;

-using TimeToApoapsis = KerbalEngineer.Flight.Readouts.Orbital.TimeToApoapsis;

-using TimeToPeriapsis = KerbalEngineer.Flight.Readouts.Orbital.TimeToPeriapsis;

-

-#endregion

-

-namespace KerbalEngineer.Flight.Readouts

-{

-    public class ReadoutLibrary

-    {

-        #region Instance

-

-        private static readonly ReadoutLibrary instance = new ReadoutLibrary();

-

-        /// <summary>

-        ///     Gets the current instance of the readout library.

-        /// </summary>

-        public static ReadoutLibrary Instance

-        {

-            get { return instance; }

-        }

-

-        #endregion

-

-        #region Fields

-

-        private List<ReadoutModule> readoutModules = new List<ReadoutModule>();

-

-        #endregion

-

-        #region Constructors

-

-        /// <summary>

-        ///     Sets up and populates the readout library with the stock readouts.

-        /// </summary>

-        private ReadoutLibrary()

-        {

-            // Orbital

-            this.readoutModules.Add(new ApoapsisHeight());

-            this.readoutModules.Add(new PeriapsisHeight());

-            this.readoutModules.Add(new TimeToApoapsis());

-            this.readoutModules.Add(new TimeToPeriapsis());

-            this.readoutModules.Add(new Inclination());

-            this.readoutModules.Add(new Eccentricity());

-            this.readoutModules.Add(new OrbitalSpeed());

-            this.readoutModules.Add(new OrbitalPeriod());

-            this.readoutModules.Add(new LongitudeOfAscendingNode());

-            this.readoutModules.Add(new LongitudeOfPeriapsis());

-            this.readoutModules.Add(new SemiMajorAxis());

-            this.readoutModules.Add(new SemiMinorAxis());

-

-            // Surface

-            this.readoutModules.Add(new AltitudeSeaLevel());

-            this.readoutModules.Add(new AltitudeTerrain());

-            this.readoutModules.Add(new VerticalSpeed());

-            this.readoutModules.Add(new HorizontalSpeed());

-            this.readoutModules.Add(new Longitude());

-            this.readoutModules.Add(new Latitude());

-            this.readoutModules.Add(new GeeForce());

-            this.readoutModules.Add(new TerminalVelocity());

-            this.readoutModules.Add(new AtmosphericEfficiency());

-            this.readoutModules.Add(new Biome());

-            this.readoutModules.Add(new Slope());

-            this.readoutModules.Add(new ImpactTime());

-            this.readoutModules.Add(new ImpactLongitude());

-            this.readoutModules.Add(new ImpactLatitude());

-            this.readoutModules.Add(new ImpactAltitude());

-            this.readoutModules.Add(new ImpactBiome());

-

-            // Vessel

-            this.readoutModules.Add(new DeltaVStaged());

-            this.readoutModules.Add(new DeltaVTotal());

-            this.readoutModules.Add(new SpecificImpulse());

-            this.readoutModules.Add(new Mass());

-            this.readoutModules.Add(new Thrust());

-            this.readoutModules.Add(new ThrustToWeight());

-            this.readoutModules.Add(new SimulationDelay());

-

-            // Rendezvous

-            this.readoutModules.Add(new TargetSelector());

-            this.readoutModules.Add(new PhaseAngle());

-            this.readoutModules.Add(new InterceptAngle());

-            this.readoutModules.Add(new RelativeInclination());

-            this.readoutModules.Add(new AngleToAscendingNode());

-            this.readoutModules.Add(new AngleToDescendingNode());

-            this.readoutModules.Add(new Rendezvous.AltitudeSeaLevel());

-            this.readoutModules.Add(new Rendezvous.ApoapsisHeight());

-            this.readoutModules.Add(new Rendezvous.PeriapsisHeight());

-            this.readoutModules.Add(new Rendezvous.TimeToApoapsis());

-            this.readoutModules.Add(new Rendezvous.TimeToPeriapsis());

-            this.readoutModules.Add(new Distance());

-            this.readoutModules.Add(new Rendezvous.OrbitalPeriod());

-

-            // Misc

-            this.readoutModules.Add(new Separator());

-            this.readoutModules.Add(new GuiSizeAdjustor());

-

-            this.LoadHelpStrings();

-        }

-

-        #endregion

-

-        #region Properties

-

-        /// <summary>

-        ///     Gets and sets the available readout modules.

-        /// </summary>

-        public List<ReadoutModule> ReadoutModules

-        {

-            get { return this.readoutModules; }

-            set { this.readoutModules = value; }

-        }

-

-        #endregion

-

-        #region Public Methods

-

-        /// <summary>

-        ///     Gets a readout module with the specified name or class name. (Returns null if not found.)

-        /// </summary>

-        public ReadoutModule GetReadoutModule(string name)

-        {

-            return this.readoutModules.FirstOrDefault(r => r.Name == name || r.GetType().Name == name || r.Category + "." + r.GetType().Name == name);

-        }

-

-        /// <summary>

-        ///     Gets a list of readout modules which are associated with the specified category.

-        /// </summary>

-        public List<ReadoutModule> GetCategory(ReadoutCategory category)

-        {

-            return this.readoutModules.Where(r => r.Category == category).ToList();

-        }

-

-        /// <summary>

-        ///     Resets all the readout modules.

-        /// </summary>

-        public void Reset()

-        {

-            foreach (var readout in this.readoutModules)

-            {

-                readout.Reset();

-            }

-        }

-

-        #endregion

-

-        #region Private Methods

-

-        /// <summary>

-        ///     Loads the help strings from file.

-        /// </summary>

-        private void LoadHelpStrings()

-        {

-            var handler = SettingHandler.Load("HelpStrings.xml");

-            foreach (var readout in this.readoutModules)

-            {

-                readout.HelpString = handler.GetSet(readout.Category + "." + readout.GetType().Name, readout.HelpString);

-            }

-            handler.Save("HelpStrings.xml");

-        }

-

-        #endregion

-    }

+// 
+//     Kerbal Engineer Redux
+// 
+//     Copyright (C) 2015 CYBUTEK
+// 
+//     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/>.
+// 
+
+namespace KerbalEngineer.Flight.Readouts
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Linq;
+    using Miscellaneous;
+    using Orbital;
+    using Orbital.ManoeuvreNode;
+    using Rendezvous;
+    using Settings;
+    using Surface;
+    using Thermal;
+    using Vessel;
+    using AltitudeSeaLevel = Surface.AltitudeSeaLevel;
+    using ApoapsisHeight = Orbital.ApoapsisHeight;
+    using OrbitalPeriod = Orbital.OrbitalPeriod;
+    using PeriapsisHeight = Orbital.PeriapsisHeight;
+    using SemiMajorAxis = Orbital.SemiMajorAxis;
+    using SemiMinorAxis = Orbital.SemiMinorAxis;
+    using TimeToApoapsis = Orbital.TimeToApoapsis;
+    using TimeToPeriapsis = Orbital.TimeToPeriapsis;
+
+    public static class ReadoutLibrary
+    {
+        private static List<ReadoutModule> readouts = new List<ReadoutModule>();
+
+        /// <summary>
+        ///     Sets up and populates the readout library with the stock readouts.
+        /// </summary>
+        static ReadoutLibrary()
+        {
+            try
+            {
+                ReadoutCategory.SetCategory("Orbital", "Readout for orbital manovoeures.");
+                ReadoutCategory.SetCategory("Surface", "Surface and atmospheric readouts.");
+                ReadoutCategory.SetCategory("Vessel", "Vessel performance statistics.");
+                ReadoutCategory.SetCategory("Rendezvous", "Readouts for rendezvous manovoeures.");
+                ReadoutCategory.SetCategory("Thermal", "Thermal characteristics readouts.");
+                ReadoutCategory.SetCategory("Miscellaneous", "Miscellaneous readouts.");
+                ReadoutCategory.Selected = ReadoutCategory.GetCategory("Orbital");
+
+                // Orbital
+                readouts.Add(new ApoapsisHeight());
+                readouts.Add(new PeriapsisHeight());
+                readouts.Add(new TimeToApoapsis());
+                readouts.Add(new TimeToPeriapsis());
+                readouts.Add(new Inclination());
+                readouts.Add(new TimeToEquatorialAscendingNode());
+                readouts.Add(new TimeToEquatorialDescendingNode());
+                readouts.Add(new AngleToEquatorialAscendingNode());
+                readouts.Add(new AngleToEquatorialDescendingNode());
+                readouts.Add(new Eccentricity());
+                readouts.Add(new OrbitalSpeed());
+                readouts.Add(new OrbitalPeriod());
+                readouts.Add(new CurrentSoi());
+                readouts.Add(new LongitudeOfAscendingNode());
+                readouts.Add(new LongitudeOfPeriapsis());
+                readouts.Add(new ArgumentOfPeriapsis());
+                readouts.Add(new TrueAnomaly());
+                readouts.Add(new MeanAnomaly());
+                readouts.Add(new MeanAnomalyAtEpoc());
+                readouts.Add(new EccentricAnomaly());
+                readouts.Add(new SemiMajorAxis());
+                readouts.Add(new SemiMinorAxis());
+                readouts.Add(new AngleToPrograde());
+                readouts.Add(new AngleToRetrograde());
+                readouts.Add(new NodeProgradeDeltaV());
+                readouts.Add(new NodeNormalDeltaV());
+                readouts.Add(new NodeRadialDeltaV());
+                readouts.Add(new NodeTotalDeltaV());
+                readouts.Add(new NodeBurnTime());
+                readouts.Add(new NodeHalfBurnTime());
+                readouts.Add(new NodeTimeToManoeuvre());
+                readouts.Add(new NodeTimeToHalfBurn());
+                readouts.Add(new NodeAngleToPrograde());
+                readouts.Add(new NodeAngleToRetrograde());
+
+                // Surface
+                readouts.Add(new AltitudeSeaLevel());
+                readouts.Add(new AltitudeTerrain());
+                readouts.Add(new VerticalSpeed());
+                readouts.Add(new VerticalAcceleration());
+                readouts.Add(new HorizontalSpeed());
+                readouts.Add(new HorizontalAcceleration());
+                readouts.Add(new MachNumber());
+                readouts.Add(new Latitude());
+                readouts.Add(new Longitude());
+                readouts.Add(new GeeForce());
+                readouts.Add(new TerminalVelocity());
+                readouts.Add(new AtmosphericEfficiency());
+                readouts.Add(new Biome());
+                readouts.Add(new Situation());
+                readouts.Add(new Slope());
+                readouts.Add(new ImpactTime());
+                readouts.Add(new ImpactLongitude());
+                readouts.Add(new ImpactLatitude());
+                readouts.Add(new ImpactAltitude());
+                readouts.Add(new ImpactBiome());
+
+                // Vessel
+                readouts.Add(new DeltaVStaged());
+                readouts.Add(new DeltaVCurrent());
+                readouts.Add(new DeltaVTotal());
+                readouts.Add(new DeltaVCurrentTotal());
+                readouts.Add(new SpecificImpulse());
+                readouts.Add(new Mass());
+                readouts.Add(new Thrust());
+                readouts.Add(new ThrustToWeight());
+                readouts.Add(new ThrustOffsetAngle());
+                readouts.Add(new ThrustTorque());
+                readouts.Add(new SurfaceThrustToWeight());
+                readouts.Add(new Acceleration());
+                readouts.Add(new SuicideBurnAltitude());
+                readouts.Add(new SuicideBurnDistance());
+                readouts.Add(new SuicideBurnDeltaV());
+                readouts.Add(new IntakeAirUsage());
+                readouts.Add(new IntakeAirDemand());
+                readouts.Add(new IntakeAirSupply());
+                readouts.Add(new IntakeAirDemandSupply());
+                readouts.Add(new PartCount());
+                readouts.Add(new Heading());
+                readouts.Add(new Pitch());
+                readouts.Add(new Roll());
+                readouts.Add(new HeadingRate());
+                readouts.Add(new PitchRate());
+                readouts.Add(new RollRate());
+
+                // Rendezvous
+                readouts.Add(new TargetSelector());
+                readouts.Add(new PhaseAngle());
+                readouts.Add(new InterceptAngle());
+                readouts.Add(new RelativeVelocity());
+                readouts.Add(new RelativeSpeed());
+                readouts.Add(new RelativeInclination());
+                readouts.Add(new TimeToRelativeAscendingNode());
+                readouts.Add(new TimeToRelativeDescendingNode());
+                readouts.Add(new AngleToRelativeAscendingNode());
+                readouts.Add(new AngleToRelativeDescendingNode());
+                readouts.Add(new Rendezvous.AltitudeSeaLevel());
+                readouts.Add(new Rendezvous.ApoapsisHeight());
+                readouts.Add(new Rendezvous.PeriapsisHeight());
+                readouts.Add(new Rendezvous.TimeToApoapsis());
+                readouts.Add(new Rendezvous.TimeToPeriapsis());
+                readouts.Add(new Distance());
+                readouts.Add(new Rendezvous.OrbitalPeriod());
+                readouts.Add(new Rendezvous.SemiMajorAxis());
+                readouts.Add(new Rendezvous.SemiMinorAxis());
+
+                // Thermal
+                readouts.Add(new InternalFlux());
+                readouts.Add(new ConvectionFlux());
+                readouts.Add(new RadiationFlux());
+                readouts.Add(new CriticalPart());
+                readouts.Add(new CriticalTemperature());
+                readouts.Add(new CriticalPercentage());
+                readouts.Add(new HottestPart());
+                readouts.Add(new HottestTemperature());
+                readouts.Add(new CoolestPart());
+                readouts.Add(new CoolestTemperature());
+
+                // Misc
+                readouts.Add(new Separator());
+                readouts.Add(new GuiSizeAdjustor());
+                readouts.Add(new SimulationDelay());
+                readouts.Add(new TimeReference());
+                readouts.Add(new VectoredThrustToggle());
+                readouts.Add(new SystemTime());
+
+                LoadHelpStrings();
+            }
+            catch (Exception ex)
+            {
+                Logger.Exception(ex);
+            }
+        }
+
+        /// <summary>
+        ///     Gets and sets the available readout modules.
+        /// </summary>
+        public static List<ReadoutModule> Readouts
+        {
+            get
+            {
+                return readouts;
+            }
+            set
+            {
+                readouts = value;
+            }
+        }
+
+        /// <summary>
+        ///     Gets a list of readout modules which are associated with the specified category.
+        /// </summary>
+        public static List<ReadoutModule> GetCategory(ReadoutCategory category)
+        {
+            return readouts.Where(r => r.Category == category).ToList();
+        }
+
+        /// <summary>
+        ///     Gets a readout module with the specified name or class name. (Returns null if not found.)
+        /// </summary>
+        public static ReadoutModule GetReadout(string name)
+        {
+            return readouts.FirstOrDefault(r => r.Name == name || r.GetType().Name == name || r.Category + "." + r.GetType().Name == name);
+        }
+
+        /// <summary>
+        ///     Resets all the readout modules.
+        /// </summary>
+        public static void Reset()
+        {
+            foreach (ReadoutModule readout in readouts)
+            {
+                readout.Reset();
+            }
+        }
+
+        /// <summary>
+        ///     Loads the help strings from file.
+        /// </summary>
+        private static void LoadHelpStrings()
+        {
+            try
+            {
+                SettingHandler handler = SettingHandler.Load("HelpStrings.xml");
+                foreach (ReadoutModule readout in readouts)
+                {
+                    readout.HelpString = handler.GetSet(readout.Category + "." + readout.GetType().Name, readout.HelpString);
+                }
+                handler.Save("HelpStrings.xml");
+            }
+            catch (Exception ex)
+            {
+                Logger.Exception(ex);
+            }
+        }
+    }
 }