Added acceleration readout.
[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,7 +1,7 @@
 // 
 //     Kerbal Engineer Redux
 // 
-//     Copyright (C) 2014 CYBUTEK
+//     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
@@ -17,183 +17,242 @@
 //     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
+    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
     {
-        #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
+        private static List<ReadoutModule> readouts = new List<ReadoutModule>();
 
         /// <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 Acceleration());
-            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
+        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 List<ReadoutModule> ReadoutModules
-        {
-            get { return this.readoutModules; }
-            set { this.readoutModules = value; }
-        }
-
-        #endregion
-
-        #region Public Methods
+        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 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();
+        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 void Reset()
-        {
-            foreach (var readout in this.readoutModules)
+        public static void Reset()
+        {
+            foreach (ReadoutModule readout in readouts)
             {
                 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
+        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);
+            }
+        }
     }
 }