Added readouts for post-burn Ap and Pe
--- a/Documents/CHANGES.txt
+++ b/Documents/CHANGES.txt
@@ -1,3 +1,6 @@
+1.0.17.1
+ Fixed: Synched the minimum simulation time sliders and stopped them from snapping back after 999ms. (saybur)
+
1.0.17.0
Added: 'Mach Number' readout under the 'Surface' category and included it on the default surface HUD.
Added: Stock sections in the Flight Engineer can now become HUDs.
--- a/KerbalEngineer/Editor/BuildAdvanced.cs
+++ b/KerbalEngineer/Editor/BuildAdvanced.cs
@@ -523,12 +523,12 @@
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
- GUILayout.Label("Simulate using vectored thrust values:");
+ GUILayout.Label("Simulate using vectored thrust values:", settingStyle);
SimManager.vectoredThrust = GUILayout.Toggle(SimManager.vectoredThrust, "ENABLED", buttonStyle, GUILayout.Width(100.0f * GuiDisplaySize.Offset));
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
- GUILayout.Label("Verbose Simulation Log:");
+ GUILayout.Label("Verbose Simulation Log:", settingStyle);
SimManager.logOutput = GUILayout.Toggle(SimManager.logOutput, "ENABLED", buttonStyle, GUILayout.Width(100.0f * GuiDisplaySize.Offset));
GUILayout.EndHorizontal();
--- a/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/ManoeuvreProcessor.cs
+++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/ManoeuvreProcessor.cs
@@ -63,6 +63,10 @@
public static double NormalDeltaV { get; private set; }
+ public static double PostBurnAp { get; private set; }
+
+ public static double PostBurnPe { get; private set; }
+
public static double ProgradeDeltaV { get; private set; }
public static double RadialDeltaV { get; private set; }
@@ -110,6 +114,8 @@
NormalDeltaV = deltaV.y;
RadialDeltaV = deltaV.x;
TotalDeltaV = node.GetBurnVector(FlightGlobals.ship_orbit).magnitude;
+ PostBurnAp = node.nextPatch != null ? node.nextPatch.ApA : 0;
+ PostBurnPe = node.nextPatch != null ? node.nextPatch.PeA : 0;
UniversalTime = FlightGlobals.ActiveVessel.patchedConicSolver.maneuverNodes[0].UT;
AngleToPrograde = FlightGlobals.ActiveVessel.patchedConicSolver.maneuverNodes[0].patch.GetAngleToPrograde(UniversalTime);
--- /dev/null
+++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/PostBurnApoapsis.cs
@@ -1,1 +1,69 @@
+//
+// 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;
+
+using KerbalEngineer.Extensions;
+using KerbalEngineer.Flight.Sections;
+
+#endregion
+
+namespace KerbalEngineer.Flight.Readouts.Orbital.ManoeuvreNode
+{
+ public class PostBurnApoapsis : ReadoutModule
+ {
+ #region Constructors
+
+ public PostBurnApoapsis()
+ {
+ this.Name = "Post-burn Apoapsis";
+ this.Category = ReadoutCategory.GetCategory("Orbital");
+ this.HelpString = String.Empty;
+ this.IsDefault = false;
+ }
+
+ #endregion
+
+ #region Methods: public
+
+ public override void Draw(SectionModule section)
+ {
+ if (!ManoeuvreProcessor.ShowDetails)
+ {
+ return;
+ }
+
+ this.DrawLine("Post-burn Apoapsis", ManoeuvreProcessor.PostBurnAp.ToDistance(), section.IsHud);
+ }
+
+ public override void Reset()
+ {
+ ManoeuvreProcessor.Reset();
+ }
+
+ public override void Update()
+ {
+ ManoeuvreProcessor.RequestUpdate();
+ }
+
+ #endregion
+ }
+}
--- /dev/null
+++ b/KerbalEngineer/Flight/Readouts/Orbital/ManoeuvreNode/PostBurnPeriapsis.cs
@@ -1,1 +1,69 @@
+//
+// 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;
+
+using KerbalEngineer.Extensions;
+using KerbalEngineer.Flight.Sections;
+
+#endregion
+
+namespace KerbalEngineer.Flight.Readouts.Orbital.ManoeuvreNode
+{
+ public class PostBurnPeriapsis : ReadoutModule
+ {
+ #region Constructors
+
+ public PostBurnPeriapsis()
+ {
+ this.Name = "Post-burn Periapsis";
+ this.Category = ReadoutCategory.GetCategory("Orbital");
+ this.HelpString = String.Empty;
+ this.IsDefault = false;
+ }
+
+ #endregion
+
+ #region Methods: public
+
+ public override void Draw(SectionModule section)
+ {
+ if (!ManoeuvreProcessor.ShowDetails)
+ {
+ return;
+ }
+
+ this.DrawLine("Post-burn Periapsis", ManoeuvreProcessor.PostBurnPe.ToDistance(), section.IsHud);
+ }
+
+ public override void Reset()
+ {
+ ManoeuvreProcessor.Reset();
+ }
+
+ public override void Update()
+ {
+ ManoeuvreProcessor.RequestUpdate();
+ }
+
+ #endregion
+ }
+}
--- /dev/null
+++ b/KerbalEngineer/Flight/Readouts/Orbital/SpeedAtApoapsis.cs
@@ -1,1 +1,68 @@
+//
+// 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;
+using KerbalEngineer.Flight.Sections;
+using KerbalEngineer.Helpers;
+using KerbalEngineer.Extensions;
+
+#endregion
+
+namespace KerbalEngineer.Flight.Readouts.Orbital
+{
+ public class SpeedAtApoapsis : ReadoutModule
+ {
+ #region Constructors
+
+ public SpeedAtApoapsis()
+ {
+ this.Name = "Speed at Apoapsis";
+ this.Category = ReadoutCategory.GetCategory("Orbital");
+ this.HelpString = "Shows the orbital speed of the vessel when at apoapsis, the highest point of the orbit.";
+ this.IsDefault = false;
+ }
+
+ #endregion
+
+ #region Methods: public
+
+ public override void Draw(SectionModule section)
+ {
+ // Vis-viva: v^2 = GM(2/r - 1/a)
+ // All this is easily got from the ships orbit (and reference body)
+ String str;
+ Orbit orbit = FlightGlobals.ship_orbit;
+ if (orbit.eccentricity > 1.0)
+ str = "---m/s";
+ else
+ {
+ double speedsqr = orbit.referenceBody.gravParameter * ((2 / orbit.ApR) - (1 / orbit.semiMajorAxis));
+ if (Double.IsNaN(speedsqr) || speedsqr < 0)
+ str = "---m/s"; // Don't think this is possible barring bugs in the Orbit class
+ else
+ str = Math.Sqrt(speedsqr).ToSpeed();
+ }
+ this.DrawLine(str, section.IsHud);
+ }
+
+ #endregion
+ }
+}
--- /dev/null
+++ b/KerbalEngineer/Flight/Readouts/Orbital/SpeedAtPeriapsis.cs
@@ -1,1 +1,64 @@
+//
+// 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;
+using KerbalEngineer.Flight.Sections;
+using KerbalEngineer.Helpers;
+using KerbalEngineer.Extensions;
+
+#endregion
+
+namespace KerbalEngineer.Flight.Readouts.Orbital
+{
+ public class SpeedAtPeriapsis : ReadoutModule
+ {
+ #region Constructors
+
+ public SpeedAtPeriapsis()
+ {
+ this.Name = "Speed at Periapsis";
+ this.Category = ReadoutCategory.GetCategory("Orbital");
+ this.HelpString = "Shows the orbital speed of the vessel when at periapsis, the lowest point of the orbit.";
+ this.IsDefault = false;
+ }
+
+ #endregion
+
+ #region Methods: public
+
+ public override void Draw(SectionModule section)
+ {
+ // Vis-viva: v^2 = GM(2/r - 1/a)
+ // All this is easily got from the ships orbit (and reference body)
+ String str;
+ Orbit orbit = FlightGlobals.ship_orbit;
+ double oneovera = (orbit.eccentricity == 1) ? 0 : (1 / orbit.semiMajorAxis);
+ double speedsqr = orbit.referenceBody.gravParameter * ((2 / orbit.PeR) - oneovera);
+ if (Double.IsNaN(speedsqr) || speedsqr < 0)
+ str = "---m/s";
+ else
+ str = Math.Sqrt(speedsqr).ToSpeed();
+ this.DrawLine(str, section.IsHud);
+ }
+
+ #endregion
+ }
+}
--- /dev/null
+++ b/KerbalEngineer/Flight/Readouts/Orbital/TimeToAtmosphere.cs
@@ -1,1 +1,99 @@
+//
+// 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;
+using KerbalEngineer.Flight.Sections;
+using KerbalEngineer.Helpers;
+
+#endregion
+
+namespace KerbalEngineer.Flight.Readouts.Orbital
+{
+ public class TimeToAtmosphere : ReadoutModule
+ {
+ //private LogMsg log = new LogMsg();
+
+ #region Constructors
+
+ public TimeToAtmosphere()
+ {
+ this.Name = "Time to Atmosphere";
+ this.Category = ReadoutCategory.GetCategory("Orbital");
+ this.HelpString = "Shows the time until the vessel enters or leaves atmosphere.";
+ this.IsDefault = false;
+ }
+
+ #endregion
+
+ #region Methods: public
+
+ public override void Draw(SectionModule section)
+ {
+ String str;
+ Orbit orbit = FlightGlobals.ship_orbit;
+
+ if (orbit.referenceBody.atmosphere && orbit.PeA < orbit.referenceBody.atmosphereDepth)
+ {
+ double tA = orbit.TrueAnomalyAtRadius(orbit.referenceBody.atmosphereDepth + orbit.referenceBody.Radius);
+ //log.buf.AppendFormat("tA = {0}\n", tA);
+ double utTime = Planetarium.GetUniversalTime();
+ //log.buf.AppendFormat("utTime = {0}\n", utTime);
+ double timeAtRad1 = orbit.GetUTforTrueAnomaly(tA, orbit.period * 0.5);
+ //log.buf.AppendFormat("timeAtRad1 = {0}\n", timeAtRad1);
+ if (timeAtRad1 < utTime)
+ {
+ timeAtRad1 += orbit.period;
+ //log.buf.AppendFormat("timeAtRad1 = {0}\n", timeAtRad1);
+ }
+ double timeAtRad2 = orbit.GetUTforTrueAnomaly(-tA, orbit.period * 0.5);
+ //log.buf.AppendFormat("timeAtRad2 = {0}\n", timeAtRad2);
+ if (timeAtRad2 < utTime)
+ {
+ timeAtRad2 += orbit.period;
+ //log.buf.AppendFormat("timeAtRad2 = {0}\n", timeAtRad2);
+ }
+ double time = Math.Min(timeAtRad1, timeAtRad2) - utTime;
+ //log.buf.AppendFormat("time = {0}\n", time);
+
+ if (Double.IsNaN(time))
+ {
+ str = "---s";
+ //log.buf.AppendLine("time is NaN");
+ }
+ else
+ {
+ str = TimeFormatter.ConvertToString(time);
+ //log.buf.AppendFormat("str = {0}\n", str);
+ }
+ }
+ else
+ {
+ str = "---s";
+ //log.buf.AppendLine("no atmosphere or pe > atmosphere");
+ }
+
+ //log.Flush();
+ this.DrawLine(str, section.IsHud);
+ }
+
+ #endregion
+ }
+}
--- a/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs
+++ b/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs
@@ -91,6 +91,11 @@
readouts.Add(new NodeTimeToHalfBurn());
readouts.Add(new NodeAngleToPrograde());
readouts.Add(new NodeAngleToRetrograde());
+ readouts.Add(new PostBurnApoapsis());
+ readouts.Add(new PostBurnPeriapsis());
+ readouts.Add(new SpeedAtApoapsis());
+ readouts.Add(new SpeedAtPeriapsis());
+ readouts.Add(new TimeToAtmosphere());
// Surface
readouts.Add(new AltitudeSeaLevel());
--- a/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirDemandSupply.cs
+++ b/KerbalEngineer/Flight/Readouts/Vessel/IntakeAirDemandSupply.cs
@@ -55,10 +55,11 @@
var demand = 0.0;
foreach (var part in FlightGlobals.ActiveVessel.Parts)
{
- if (part.Modules.Contains("ModuleEngines"))
+ for (int i = 0; i < part.Modules.Count; i++)
{
- var engine = part.Modules["ModuleEngines"] as ModuleEngines;
- if (engine.isOperational)
+ PartModule partmod = part.Modules[i];
+ var engine = partmod as ModuleEngines;
+ if (engine != null && engine.isOperational)
{
demand += engine.propellants
.Where(p => p.name == "IntakeAir")
--- a/KerbalEngineer/KerbalEngineer.csproj
+++ b/KerbalEngineer/KerbalEngineer.csproj
@@ -71,11 +71,21 @@
<Compile Include="Flight\Readouts\Orbital\ManoeuvreNode\NodeAngleToPrograde.cs" />
<Compile Include="Flight\Readouts\Orbital\ManoeuvreNode\NodeTotalDeltaV.cs" />
<Compile Include="Flight\Readouts\Orbital\ManoeuvreNode\NodeProgradeDeltaV.cs" />
+ <Compile Include="Flight\Readouts\Orbital\ManoeuvreNode\PostBurnApoapsis.cs" />
+ <Compile Include="Flight\Readouts\Orbital\ManoeuvreNode\PostBurnPeriapsis.cs" />
<Compile Include="Flight\Readouts\Orbital\MeanAnomalyAtEpoc.cs" />
<Compile Include="Flight\Readouts\Orbital\MeanAnomaly.cs" />
<Compile Include="Flight\Readouts\Orbital\EccentricAnomaly.cs" />
<Compile Include="Flight\Readouts\Orbital\ArgumentOfPeriapsis.cs" />
<Compile Include="Flight\Readouts\Orbital\CurrentSoi.cs" />
+ <Compile Include="Flight\Readouts\Orbital\SemiMajorAxis.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Flight\Readouts\Orbital\SpeedAtApoapsis.cs" />
+ <Compile Include="Flight\Readouts\Orbital\SpeedAtPeriapsis.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Flight\Readouts\Orbital\TimeToAtmosphere.cs" />
<Compile Include="Flight\Readouts\Orbital\TrueAnomaly.cs" />
<Compile Include="Flight\Readouts\Orbital\TimeToEquatorialAscendingNode.cs" />
<Compile Include="Flight\Readouts\Orbital\TimeToEquatorialDescendingNode.cs" />
@@ -161,7 +171,6 @@
<Compile Include="Flight\Readouts\Orbital\OrbitalPeriod.cs" />
<Compile Include="Flight\Readouts\Orbital\OrbitalSpeed.cs" />
<Compile Include="Flight\Readouts\Orbital\PeriapsisHeight.cs" />
- <Compile Include="Flight\Readouts\Orbital\SemiMajorAxis.cs" />
<Compile Include="Flight\Readouts\Orbital\SemiMinorAxis.cs" />
<Compile Include="Flight\Readouts\Orbital\TimeToApoapsis.cs" />
<Compile Include="Flight\Readouts\Orbital\TimeToPeriapsis.cs" />