From 2c561d7c1979927b844003fb2b69505162770be8 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 10 May 2022 01:15:53 -0400 Subject: [PATCH] Eccentric around linear gravity = tracking orbit --- .../Builder/Orbital/OrbitlineBuilder.cs | 26 ++++++++++++------- .../Components/Orbital/OrbitalParameters.cs | 11 +++++--- .../Components/Orbital/TrackingOrbitLine.cs | 1 - 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs index bf614acf..8d74f897 100644 --- a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs +++ b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs @@ -35,17 +35,25 @@ namespace NewHorizons.Builder.Orbital var parentGravity = astroObject.GetPrimaryBody()?.GetGravityVolume(); - NHOrbitLine orbitLine = orbitGO.AddComponent(); + OrbitLine orbitLine; + if(parentGravity?.GetFalloffExponent() == 1 && ecc != 0) + { + orbitLine = orbitGO.AddComponent(); + } + else + { + orbitLine = orbitGO.AddComponent(); - var a = astroObject.SemiMajorAxis; - var e = astroObject.Eccentricity; - var b = a * Mathf.Sqrt(1f - (e * e)); - var l = astroObject.LongitudeOfAscendingNode; - var p = astroObject.ArgumentOfPeriapsis; - var i = astroObject.Inclination; + var a = astroObject.SemiMajorAxis; + var e = astroObject.Eccentricity; + var b = a * Mathf.Sqrt(1f - (e * e)); + var l = astroObject.LongitudeOfAscendingNode; + var p = astroObject.ArgumentOfPeriapsis; + var i = astroObject.Inclination; - orbitLine.SemiMajorAxis = a * OrbitalParameters.Rotate(Vector3.left, l, i, p); - orbitLine.SemiMinorAxis = b * OrbitalParameters.Rotate(Vector3.forward, l, i, p); + (orbitLine as NHOrbitLine).SemiMajorAxis = a * OrbitalParameters.Rotate(Vector3.left, l, i, p); + (orbitLine as NHOrbitLine).SemiMinorAxis = b * OrbitalParameters.Rotate(Vector3.forward, l, i, p); + } var color = Color.white; if (config.Orbit.Tint != null) color = config.Orbit.Tint.ToColor32(); diff --git a/NewHorizons/Components/Orbital/OrbitalParameters.cs b/NewHorizons/Components/Orbital/OrbitalParameters.cs index faaa2e2d..dadceba8 100644 --- a/NewHorizons/Components/Orbital/OrbitalParameters.cs +++ b/NewHorizons/Components/Orbital/OrbitalParameters.cs @@ -30,6 +30,13 @@ namespace NewHorizons.Components.Orbital orbitalParameters.LongitudeOfAscendingNode = longitudeOfAscendingNode; orbitalParameters.Eccentricity = eccentricity; orbitalParameters.ArgumentOfPeriapsis = argumentOfPeriapsis; + + // If primary gravity is linear and the orbit is eccentric its not even an ellipse so theres no true anomaly + if(primaryGravity.Power == 1 && eccentricity != 0) + { + trueAnomaly = 0; + } + orbitalParameters.TrueAnomaly = trueAnomaly; // Have to calculate the rest @@ -81,9 +88,7 @@ namespace NewHorizons.Components.Orbital var x = r * Mathf.Cos(f); var y = r * Mathf.Sin(f); - var n_p = new Vector2(x, y).normalized; - - var dir = Rotate(new Vector3(n_p.x, 0f, n_p.y).normalized, longitudeOfAscendingNode, inclination, argumentOfPeriapsis); + var dir = Rotate(new Vector3(x, 0f, y).normalized, longitudeOfAscendingNode, inclination, argumentOfPeriapsis); var up = Rotate(Vector3.up, longitudeOfAscendingNode, inclination, argumentOfPeriapsis); var pos = r * dir; diff --git a/NewHorizons/Components/Orbital/TrackingOrbitLine.cs b/NewHorizons/Components/Orbital/TrackingOrbitLine.cs index 1499547a..334c4293 100644 --- a/NewHorizons/Components/Orbital/TrackingOrbitLine.cs +++ b/NewHorizons/Components/Orbital/TrackingOrbitLine.cs @@ -15,7 +15,6 @@ namespace NewHorizons.Components.Orbital public float TrailTime = 120f; - public override void InitializeLineRenderer() { _lineRenderer.positionCount = this._numVerts;