using NewHorizons.Components.Orbital; using NewHorizons.Utility; using Newtonsoft.Json; using UnityEngine; namespace NewHorizons.External.Modules { public class OrbitModule : IOrbitalParameters { /// /// The semi-major axis of the ellipse that is the body's orbit. For a circular orbit this is the radius. /// public float SemiMajorAxis { get; set; } /// /// The angle (in degrees) between the body's orbit and the plane of the star system /// public float Inclination { get; set; } /// /// The name of the body this one will orbit around /// public string PrimaryBody { get; set; } /// /// Is this the moon of a planet? Used for determining when its name is shown on the map. /// public bool IsMoon { get; set; } /// /// An angle (in degrees) defining the point where the orbit of the body rises above the orbital plane if it has nonzero inclination. /// public float LongitudeOfAscendingNode { get; set; } /// /// At 0 the orbit is a circle. The closer to 1 it is, the more oval-shaped the orbit is. /// // FIXME: Needs Min & Max! public float Eccentricity { get; set; } /// /// An angle (in degrees) defining the location of the periapsis (the closest distance to it's primary body) if it has nonzero eccentricity. /// public float ArgumentOfPeriapsis { get; set; } /// /// Where the planet should start off in its orbit in terms of the central angle. /// public float TrueAnomaly { get; set; } /// /// The angle between the normal to the orbital plane and its axis of rotation. /// public float AxialTilt { get; set; } /// /// Rotation period in minutes. /// public float SiderealPeriod { get; set; } /// /// Should the body always have one side facing its primary? /// public bool IsTidallyLocked { get; set; } /// /// If it is tidally locked, this direction will face towards the primary. Ex: Interloper uses `0, -1, 0`. Most planets will want something like `-1, 0, 0`. /// public MVector3 AlignmentAxis { get; set; } /// /// Referring to the orbit line in the map screen. /// public bool ShowOrbitLine { get; set; } = true; /// /// Should the orbit line be dotted? /// public bool DottedOrbitLine { get; set; } = false; /// /// Is the body meant to stay in one place without moving? /// public bool IsStatic { get; set; } /// /// Colour of the orbit-line in the map view. /// public MColor Tint { get; set; } /// /// Should we just draw a line behind its orbit instead of the entire circle/ellipse? /// public bool TrackingOrbitLine { get; set; } = false; public OrbitalParameters GetOrbitalParameters(Gravity primaryGravity, Gravity secondaryGravity) { return OrbitalParameters.FromTrueAnomaly(primaryGravity, secondaryGravity, Eccentricity, SemiMajorAxis, Inclination, ArgumentOfPeriapsis, LongitudeOfAscendingNode, TrueAnomaly); } } }