Merge branch 'Gerry1135-speedatapses' #47
--- a/Documents/CHANGES.txt
+++ b/Documents/CHANGES.txt
@@ -1,5 +1,8 @@
1.0.17.1
+ Added: Orbital readouts - "Speed at Periapsis" and "Speed at Apoapsis". (Padishar)
+ Added: Manoeuvre readouts - "Post-burn Apoapsis" and "Post-burn Periapsis". (Padishar)
Fixed: Synched the minimum simulation time sliders and stopped them from snapping back after 999ms. (saybur)
+ Fixed: Added workaround for the bug in Vessel.horizontalSrfSpeed (Padishar)
1.0.17.0
Added: 'Mach Number' readout under the 'Surface' category and included it on the default surface HUD.
@@ -21,8 +24,8 @@
Changed: Mach on the Build Engineer now accurate to 2 decimal places.
Changed: Max mach in the Build Engineer defaults to 1.00 even when no jet engines are present.
- Changed: Increased eccentricity readout to 5 decimal places.
- Changed: Implemented Sarbian's object pooling.
+ Changed: Increased eccentricity readout to 5 decimal places.
+ Changed: Implemented Sarbian's object pooling.
Changed: The default selected body is now assigned via 'Planitarium.Home'.
Changed: HUDs to clamp fully inside the screen instead of allowing them to run off the edge by a certain amount.
Fixed: Physically insignificant part mass is now associated with the parent part.
@@ -76,7 +79,7 @@
1.0.15.1, 13-02-2015
Rebuild
-
+
1.0.15.0, 08-02-2015
Padishar's Fixes:
Added: Support KIDS ISP thrust correction.
@@ -86,7 +89,7 @@
1.0.14.1, 28-12-2014
Fixed: Missing texture on the ER-7500 model.
-
+
1.0.14.0, 28-12-2014
Added: Career mode that limits the Flight Engineer by:
- Requiring an Engineer Kerbal of any level, or placement of an Engineer Chip or ER-7500 part.
@@ -206,7 +209,7 @@
Added: New readout to the surface category:
- Vertical Acceleration
- Horizontal Acceleration
-
+
Changed: Atmospheric efficiency readout now shows as a percentage.
Changed: Atmospheric settings (pressure/velocity) in the editor condensed onto a single line.
Fixed: Bug where the overlays in the editor would stay open outside of parts screen.
@@ -363,6 +366,7 @@
Added: Stock toolbar support in the Flight Engineer.
Changed: Orbital Period has higher precision.
Fixed: Various NullRefs in editor window and overlay.
-
+
1.0.0.0, 24-07-2014
Initial release for public testing.
+
--- 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/Surface/HorizontalSpeed.cs
+++ b/KerbalEngineer/Flight/Readouts/Surface/HorizontalSpeed.cs
@@ -21,6 +21,7 @@
using KerbalEngineer.Extensions;
using KerbalEngineer.Flight.Sections;
+using System;
#endregion
@@ -44,7 +45,11 @@
public override void Draw(SectionModule section)
{
- this.DrawLine(FlightGlobals.ActiveVessel.horizontalSrfSpeed.ToSpeed(), section.IsHud);
+ // Used to do this but the bug-fix to horizontalSrfSpeed in KSP 1.0.3 actually made it worse so workaround
+ //this.DrawLine(FlightGlobals.ActiveVessel.horizontalSrfSpeed.ToSpeed(), section.IsHud);
+ var ves = FlightGlobals.ActiveVessel;
+ double horizSpeed = Math.Sqrt(ves.srfSpeed * ves.srfSpeed - ves.verticalSpeed * ves.verticalSpeed);
+ this.DrawLine(horizSpeed.ToSpeed(), section.IsHud);
}
#endregion
--- 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" />
--- a/KerbalEngineer/LogMsg.cs
+++ b/KerbalEngineer/LogMsg.cs
@@ -15,7 +15,8 @@
public void Flush()
{
- MonoBehaviour.print(this.buf);
+ if (this.buf.Length > 0)
+ MonoBehaviour.print(this.buf);
this.buf.Length = 0;
}
}