Packaged for 1.0.2.
[VesselSimulator.git] / KerbalEngineer / Flight / Readouts / ReadoutLibrary.cs
blob:a/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs -> blob:b/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs
// //
// Kerbal Engineer Redux // Kerbal Engineer Redux
// //
// Copyright (C) 2014 CYBUTEK // Copyright (C) 2014 CYBUTEK
// //
// This program is free software: you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or // the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version. // (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details. // GNU General Public License for more details.
// //
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
// //
#region Using Directives #region Using Directives
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using KerbalEngineer.Flight.Readouts.Misc; using KerbalEngineer.Flight.Readouts.Misc;
using KerbalEngineer.Flight.Readouts.Orbital; using KerbalEngineer.Flight.Readouts.Orbital;
using KerbalEngineer.Flight.Readouts.Rendezvous; using KerbalEngineer.Flight.Readouts.Rendezvous;
using KerbalEngineer.Flight.Readouts.Surface; using KerbalEngineer.Flight.Readouts.Surface;
using KerbalEngineer.Flight.Readouts.Vessel; using KerbalEngineer.Flight.Readouts.Vessel;
using KerbalEngineer.Settings; using KerbalEngineer.Settings;
using AltitudeSeaLevel = KerbalEngineer.Flight.Readouts.Surface.AltitudeSeaLevel; using AltitudeSeaLevel = KerbalEngineer.Flight.Readouts.Surface.AltitudeSeaLevel;
using ApoapsisHeight = KerbalEngineer.Flight.Readouts.Orbital.ApoapsisHeight; using ApoapsisHeight = KerbalEngineer.Flight.Readouts.Orbital.ApoapsisHeight;
using OrbitalPeriod = KerbalEngineer.Flight.Readouts.Orbital.OrbitalPeriod; using OrbitalPeriod = KerbalEngineer.Flight.Readouts.Orbital.OrbitalPeriod;
using PeriapsisHeight = KerbalEngineer.Flight.Readouts.Orbital.PeriapsisHeight; using PeriapsisHeight = KerbalEngineer.Flight.Readouts.Orbital.PeriapsisHeight;
using TimeToApoapsis = KerbalEngineer.Flight.Readouts.Orbital.TimeToApoapsis; using TimeToApoapsis = KerbalEngineer.Flight.Readouts.Orbital.TimeToApoapsis;
using TimeToPeriapsis = KerbalEngineer.Flight.Readouts.Orbital.TimeToPeriapsis; using TimeToPeriapsis = KerbalEngineer.Flight.Readouts.Orbital.TimeToPeriapsis;
#endregion #endregion
namespace KerbalEngineer.Flight.Readouts namespace KerbalEngineer.Flight.Readouts
{ {
public class ReadoutLibrary public class ReadoutLibrary
{ {
#region Instance #region Instance
private static readonly ReadoutLibrary instance = new ReadoutLibrary(); private static readonly ReadoutLibrary instance = new ReadoutLibrary();
/// <summary> /// <summary>
/// Gets the current instance of the readout library. /// Gets the current instance of the readout library.
/// </summary> /// </summary>
public static ReadoutLibrary Instance public static ReadoutLibrary Instance
{ {
get { return instance; } get { return instance; }
} }
#endregion #endregion
#region Fields #region Fields
private List<ReadoutModule> readoutModules = new List<ReadoutModule>(); private List<ReadoutModule> readoutModules = new List<ReadoutModule>();
#endregion #endregion
#region Constructors #region Constructors
/// <summary> /// <summary>
/// Sets up and populates the readout library with the stock readouts. /// Sets up and populates the readout library with the stock readouts.
/// </summary> /// </summary>
private ReadoutLibrary() private ReadoutLibrary()
{ {
// Orbital // Orbital
this.readoutModules.Add(new ApoapsisHeight()); this.readoutModules.Add(new ApoapsisHeight());
this.readoutModules.Add(new PeriapsisHeight()); this.readoutModules.Add(new PeriapsisHeight());
this.readoutModules.Add(new TimeToApoapsis()); this.readoutModules.Add(new TimeToApoapsis());
this.readoutModules.Add(new TimeToPeriapsis()); this.readoutModules.Add(new TimeToPeriapsis());
this.readoutModules.Add(new Inclination()); this.readoutModules.Add(new Inclination());
this.readoutModules.Add(new Eccentricity()); this.readoutModules.Add(new Eccentricity());
this.readoutModules.Add(new OrbitalSpeed()); this.readoutModules.Add(new OrbitalSpeed());
this.readoutModules.Add(new OrbitalPeriod()); this.readoutModules.Add(new OrbitalPeriod());
this.readoutModules.Add(new LongitudeOfAscendingNode()); this.readoutModules.Add(new LongitudeOfAscendingNode());
this.readoutModules.Add(new LongitudeOfPeriapsis()); this.readoutModules.Add(new LongitudeOfPeriapsis());
this.readoutModules.Add(new SemiMajorAxis()); this.readoutModules.Add(new SemiMajorAxis());
this.readoutModules.Add(new SemiMinorAxis()); this.readoutModules.Add(new SemiMinorAxis());
// Surface // Surface
this.readoutModules.Add(new AltitudeSeaLevel()); this.readoutModules.Add(new AltitudeSeaLevel());
this.readoutModules.Add(new AltitudeTerrain()); this.readoutModules.Add(new AltitudeTerrain());
this.readoutModules.Add(new VerticalSpeed()); this.readoutModules.Add(new VerticalSpeed());
this.readoutModules.Add(new HorizontalSpeed()); this.readoutModules.Add(new HorizontalSpeed());
this.readoutModules.Add(new Longitude()); this.readoutModules.Add(new Longitude());
this.readoutModules.Add(new Latitude()); this.readoutModules.Add(new Latitude());
this.readoutModules.Add(new GeeForce()); this.readoutModules.Add(new GeeForce());
this.readoutModules.Add(new TerminalVelocity()); this.readoutModules.Add(new TerminalVelocity());
this.readoutModules.Add(new AtmosphericEfficiency()); this.readoutModules.Add(new AtmosphericEfficiency());
this.readoutModules.Add(new Biome()); this.readoutModules.Add(new Biome());
this.readoutModules.Add(new Slope()); this.readoutModules.Add(new Slope());
this.readoutModules.Add(new ImpactTime()); this.readoutModules.Add(new ImpactTime());
this.readoutModules.Add(new ImpactLongitude()); this.readoutModules.Add(new ImpactLongitude());
this.readoutModules.Add(new ImpactLatitude()); this.readoutModules.Add(new ImpactLatitude());
this.readoutModules.Add(new ImpactAltitude()); this.readoutModules.Add(new ImpactAltitude());
this.readoutModules.Add(new ImpactBiome()); this.readoutModules.Add(new ImpactBiome());
// Vessel // Vessel
this.readoutModules.Add(new DeltaVStaged()); this.readoutModules.Add(new DeltaVStaged());
this.readoutModules.Add(new DeltaVTotal()); this.readoutModules.Add(new DeltaVTotal());
this.readoutModules.Add(new SpecificImpulse()); this.readoutModules.Add(new SpecificImpulse());
this.readoutModules.Add(new Mass()); this.readoutModules.Add(new Mass());
this.readoutModules.Add(new Thrust()); this.readoutModules.Add(new Thrust());
this.readoutModules.Add(new ThrustToWeight()); this.readoutModules.Add(new ThrustToWeight());
this.readoutModules.Add(new SimulationDelay()); this.readoutModules.Add(new SimulationDelay());
// Rendezvous // Rendezvous
this.readoutModules.Add(new TargetSelector()); this.readoutModules.Add(new TargetSelector());
this.readoutModules.Add(new PhaseAngle()); this.readoutModules.Add(new PhaseAngle());
this.readoutModules.Add(new InterceptAngle()); this.readoutModules.Add(new InterceptAngle());
this.readoutModules.Add(new RelativeInclination()); this.readoutModules.Add(new RelativeInclination());
this.readoutModules.Add(new AngleToAscendingNode()); this.readoutModules.Add(new AngleToAscendingNode());
this.readoutModules.Add(new AngleToDescendingNode()); this.readoutModules.Add(new AngleToDescendingNode());
this.readoutModules.Add(new Rendezvous.AltitudeSeaLevel()); this.readoutModules.Add(new Rendezvous.AltitudeSeaLevel());
this.readoutModules.Add(new Rendezvous.ApoapsisHeight()); this.readoutModules.Add(new Rendezvous.ApoapsisHeight());
this.readoutModules.Add(new Rendezvous.PeriapsisHeight()); this.readoutModules.Add(new Rendezvous.PeriapsisHeight());
this.readoutModules.Add(new Rendezvous.TimeToApoapsis()); this.readoutModules.Add(new Rendezvous.TimeToApoapsis());
this.readoutModules.Add(new Rendezvous.TimeToPeriapsis()); this.readoutModules.Add(new Rendezvous.TimeToPeriapsis());
this.readoutModules.Add(new Distance()); this.readoutModules.Add(new Distance());
this.readoutModules.Add(new Rendezvous.OrbitalPeriod()); this.readoutModules.Add(new Rendezvous.OrbitalPeriod());
// Misc // Misc
this.readoutModules.Add(new Separator()); this.readoutModules.Add(new Separator());
this.readoutModules.Add(new ChangeGuiSize()); this.readoutModules.Add(new GuiSizeAdjustor());
this.LoadHelpStrings(); this.LoadHelpStrings();
} }
#endregion #endregion
#region Properties #region Properties
/// <summary> /// <summary>
/// Gets and sets the available readout modules. /// Gets and sets the available readout modules.
/// </summary> /// </summary>
public List<ReadoutModule> ReadoutModules public List<ReadoutModule> ReadoutModules
{ {
get { return this.readoutModules; } get { return this.readoutModules; }
set { this.readoutModules = value; } set { this.readoutModules = value; }
} }
#endregion #endregion
#region Public Methods #region Public Methods
/// <summary> /// <summary>
/// Gets a readout module with the specified name or class name. (Returns null if not found.) /// Gets a readout module with the specified name or class name. (Returns null if not found.)
/// </summary> /// </summary>
public ReadoutModule GetReadoutModule(string name) public ReadoutModule GetReadoutModule(string name)
{ {
return this.readoutModules.FirstOrDefault(r => r.Name == name || r.GetType().Name == name || r.Category + "." + r.GetType().Name == name); return this.readoutModules.FirstOrDefault(r => r.Name == name || r.GetType().Name == name || r.Category + "." + r.GetType().Name == name);
} }
/// <summary> /// <summary>
/// Gets a list of readout modules which are associated with the specified category. /// Gets a list of readout modules which are associated with the specified category.
/// </summary> /// </summary>
public List<ReadoutModule> GetCategory(ReadoutCategory category) public List<ReadoutModule> GetCategory(ReadoutCategory category)
{ {
return this.readoutModules.Where(r => r.Category == category).ToList(); return this.readoutModules.Where(r => r.Category == category).ToList();
} }
/// <summary> /// <summary>
/// Resets all the readout modules. /// Resets all the readout modules.
/// </summary> /// </summary>
public void Reset() public void Reset()
{ {
foreach (var readout in this.readoutModules) foreach (var readout in this.readoutModules)
{ {
readout.Reset(); readout.Reset();
} }
} }
#endregion #endregion
#region Private Methods #region Private Methods
/// <summary> /// <summary>
/// Loads the help strings from file. /// Loads the help strings from file.
/// </summary> /// </summary>
private void LoadHelpStrings() private void LoadHelpStrings()
{ {
var handler = SettingHandler.Load("HelpStrings.xml"); var handler = SettingHandler.Load("HelpStrings.xml");
foreach (var readout in this.readoutModules) foreach (var readout in this.readoutModules)
{ {
readout.HelpString = handler.GetSet(readout.Category + "." + readout.GetType().Name, readout.HelpString); readout.HelpString = handler.GetSet(readout.Category + "." + readout.GetType().Name, readout.HelpString);
} }
handler.Save("HelpStrings.xml"); handler.Save("HelpStrings.xml");
} }
#endregion #endregion
} }
} }