mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Some minor rework
This commit is contained in:
parent
da11adfb26
commit
b56429c87b
@ -149,14 +149,19 @@ namespace NewHorizons.Builder.General
|
||||
secondaryAO.SetKeplerCoordinatesFromTrueAnomaly(ecc, r2 / (1f - ecc), i, l, p, 180);
|
||||
|
||||
// Make sure positions are right
|
||||
primary.transform.position = point.transform.position + OrbitalHelper.GetPosition(primaryAO);
|
||||
secondary.transform.position = point.transform.position + OrbitalHelper.GetPosition(secondaryAO);
|
||||
var gravity = new OrbitalHelper.Gravity(exponent, totalMass);
|
||||
|
||||
var primaryCat = OrbitalHelper.GetCartesian(gravity, primaryAO);
|
||||
var secondaryCat = OrbitalHelper.GetCartesian(gravity, secondaryAO);
|
||||
|
||||
primary.transform.position = point.transform.position + primaryCat.Item1;
|
||||
secondary.transform.position = point.transform.position + secondaryCat.Item1;
|
||||
|
||||
Logger.Log($"Primary AO: [{primaryAO}], Secondary AO: [{secondaryAO}]");
|
||||
|
||||
// Finally we update the speeds
|
||||
var v1 = OrbitalHelper.GetVelocity(new OrbitalHelper.Gravity(exponent, totalMass), primaryAO);
|
||||
var v2 = OrbitalHelper.GetVelocity(new OrbitalHelper.Gravity(exponent, totalMass), secondaryAO);
|
||||
var v1 = primaryCat.Item2;
|
||||
var v2 = primaryCat.Item2;
|
||||
|
||||
var focalPointMotion = point.gameObject.GetComponent<InitialMotion>();
|
||||
var focalPointVelocity = focalPointMotion == null ? Vector3.zero : focalPointMotion.GetInitVelocity();
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
using NewHorizons.External;
|
||||
using NewHorizons.OrbitalPhysics;
|
||||
using NewHorizons.Utility;
|
||||
using OWML.Common;
|
||||
using PacificEngine.OW_CommonResources.Game;
|
||||
using PacificEngine.OW_CommonResources.Game.Resource;
|
||||
using PacificEngine.OW_CommonResources.Game.State;
|
||||
using PacificEngine.OW_CommonResources.Geometry.Orbits;
|
||||
@ -20,10 +22,13 @@ namespace NewHorizons.Builder.General
|
||||
public static void Make(GameObject body, IPlanetConfig config, float SOI, GravityVolume bodyGravity, InitialMotion initialMotion)
|
||||
{
|
||||
var size = new Position.Size(config.Base.SurfaceSize, SOI);
|
||||
var G = GravityVolume.GRAVITATIONAL_CONSTANT;
|
||||
var gravity = Gravity.of(bodyGravity == null ? 2f : bodyGravity.GetFalloffExponent(), bodyGravity == null ? 0 : bodyGravity.GetStandardGravitationalParameter() / G);
|
||||
var gravity = getGravity(bodyGravity);
|
||||
var parent = GetBody(config.Orbit.PrimaryBody);
|
||||
var orbit = OrbitalHelper.KeplerCoordinatesFromOrbitModule(config.Orbit);
|
||||
if (parent == HeavenlyBody.None)
|
||||
{
|
||||
Helper.helper.Console.WriteLine($"Could not find planet ({config.Name}) reference to its parent {config.Orbit.PrimaryBody}", MessageType.Warning);
|
||||
}
|
||||
|
||||
var hb = GetBody(config.Name);
|
||||
if (hb == null)
|
||||
@ -37,6 +42,14 @@ namespace NewHorizons.Builder.General
|
||||
Planet.defaultMapping = mapping;
|
||||
}
|
||||
|
||||
private static Gravity getGravity(GravityVolume volume)
|
||||
{
|
||||
var exponent = volume._falloffType != GravityVolume.FalloffType.linear ? 2f : 1f;
|
||||
var mass = (volume._surfaceAcceleration * Mathf.Pow(volume._upperSurfaceRadius, exponent)) / GravityVolume.GRAVITATIONAL_CONSTANT;
|
||||
|
||||
return Gravity.of(exponent, mass);
|
||||
}
|
||||
|
||||
private static HeavenlyBody AddHeavenlyBody(string name)
|
||||
{
|
||||
var hb = new HeavenlyBody(name);
|
||||
|
||||
@ -38,7 +38,7 @@ namespace NewHorizons.Builder.Orbital
|
||||
var gv = primaryBody.GetGravityVolume();
|
||||
if(gv != null)
|
||||
{
|
||||
var velocity = OrbitalHelper.GetVelocity(new OrbitalHelper.Gravity(primaryBody.GetGravityVolume()), orbit);
|
||||
var velocity = OrbitalHelper.GetCartesian(new OrbitalHelper.Gravity(primaryBody.GetGravityVolume()), orbit).Item2;
|
||||
|
||||
// For some stupid reason the InitialMotion awake method transforms the perfectly fine direction vector you give it so we preemptively do the inverse so it all cancels out
|
||||
initialMotion._initLinearDirection = body.transform.InverseTransformDirection(velocity.normalized);
|
||||
|
||||
@ -279,7 +279,7 @@ namespace NewHorizons
|
||||
|
||||
// Now that we're done move the planet into place
|
||||
go.transform.parent = Locator.GetRootTransform();
|
||||
go.transform.position = OrbitalHelper.GetPosition(body.Config.Orbit) + primaryBody.transform.position;
|
||||
go.transform.position = OrbitalHelper.GetCartesian(new OrbitalHelper.Gravity(1, 100), body.Config.Orbit).Item1 + primaryBody.transform.position;
|
||||
|
||||
if (go.transform.position.magnitude > FurthestOrbit)
|
||||
{
|
||||
|
||||
@ -24,21 +24,6 @@ namespace NewHorizons.OrbitalPhysics
|
||||
none
|
||||
}
|
||||
|
||||
public static Vector3 GetPosition(OrbitModule orbit)
|
||||
{
|
||||
Vector3 pos = Vector3.zero;
|
||||
if(orbit.SemiMajorAxis != 0)
|
||||
{
|
||||
// The gravity doesnt have an affect on position so we put whatever
|
||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
||||
var kepler = KeplerCoordinates.fromTrueAnomaly(orbit.Eccentricity, orbit.SemiMajorAxis, orbit.Inclination, orbit.ArgumentOfPeriapsis, orbit.LongitudeOfAscendingNode, orbit.TrueAnomaly);
|
||||
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
||||
}
|
||||
|
||||
Logger.Log($"Position : {pos}");
|
||||
return pos;
|
||||
}
|
||||
|
||||
public static Vector3 GetPosition(ParameterizedAstroObject ao)
|
||||
{
|
||||
Vector3 pos = Vector3.zero;
|
||||
@ -53,52 +38,26 @@ namespace NewHorizons.OrbitalPhysics
|
||||
return pos;
|
||||
}
|
||||
|
||||
public static Vector3 GetPositionFromTrueAnomaly(float eccentricity, float semiMajorAxis, float inclination, float argumentOfPeriapsis, float longitudeOfAscendingNode, float trueAnomaly)
|
||||
{
|
||||
Vector3 pos = Vector3.zero;
|
||||
if (semiMajorAxis != 0)
|
||||
{
|
||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
||||
var kepler = KeplerCoordinates.fromTrueAnomaly(eccentricity, semiMajorAxis, inclination, argumentOfPeriapsis, longitudeOfAscendingNode, trueAnomaly);
|
||||
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
||||
}
|
||||
|
||||
Logger.Log($"Position : {pos}");
|
||||
return pos;
|
||||
}
|
||||
|
||||
public static Vector3 GetPositionFromEccentricAnomaly(float eccentricity, float semiMajorAxis, float inclination, float argumentOfPeriapsis, float longitudeOfAscendingNode, float eccentricAnomaly)
|
||||
{
|
||||
Vector3 pos = Vector3.zero;
|
||||
if (semiMajorAxis != 0)
|
||||
{
|
||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
||||
var kepler = KeplerCoordinates.fromEccentricAnomaly(eccentricity, semiMajorAxis, inclination, argumentOfPeriapsis, longitudeOfAscendingNode, eccentricAnomaly);
|
||||
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
||||
}
|
||||
|
||||
Logger.Log($"Position : {pos}");
|
||||
return pos;
|
||||
}
|
||||
|
||||
public static Vector3 GetVelocity(Gravity gravity, OrbitModule orbit)
|
||||
{
|
||||
public static Tuple<Vector3, Vector3> GetCartesian(Gravity gravity, OrbitModule orbit)
|
||||
{
|
||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, gravity.Exponent, gravity.Mass);
|
||||
var kepler = KeplerCoordinates.fromTrueAnomaly(orbit.Eccentricity, orbit.SemiMajorAxis, orbit.Inclination, orbit.ArgumentOfPeriapsis, orbit.LongitudeOfAscendingNode, orbit.TrueAnomaly);
|
||||
var vel = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item2;
|
||||
Logger.Log($"Velocity : {vel}");
|
||||
return vel;
|
||||
}
|
||||
|
||||
public static Vector3 GetVelocity(Gravity gravity, ParameterizedAstroObject ao)
|
||||
var cartesian = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler);
|
||||
|
||||
Logger.Log($"Position : {cartesian.Item1} Velocity : {cartesian.Item2}");
|
||||
return cartesian;
|
||||
}
|
||||
|
||||
public static Tuple<Vector3, Vector3> GetCartesian(Gravity gravity, ParameterizedAstroObject ao)
|
||||
{
|
||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, gravity.Exponent, gravity.Mass);
|
||||
var kepler = KeplerCoordinates.fromTrueAnomaly(ao.Eccentricity, ao.SemiMajorAxis, ao.Inclination, ao.ArgumentOfPeriapsis, ao.LongitudeOfAscendingNode, ao.TrueAnomaly);
|
||||
var vel = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item2;
|
||||
Logger.Log($"Velocity : {vel}");
|
||||
return vel;
|
||||
}
|
||||
|
||||
var cartesian = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler);
|
||||
|
||||
Logger.Log($"Position : {cartesian.Item1} Velocity : {cartesian.Item2}");
|
||||
return cartesian;
|
||||
}
|
||||
|
||||
public static KeplerCoordinates KeplerCoordinatesFromOrbitModule(OrbitModule orbit)
|
||||
{
|
||||
return KeplerCoordinates.fromTrueAnomaly(orbit.Eccentricity, orbit.SemiMajorAxis, orbit.Inclination, orbit.ArgumentOfPeriapsis, orbit.LongitudeOfAscendingNode, orbit.TrueAnomaly);
|
||||
|
||||
@ -18,44 +18,6 @@ namespace NewHorizons.OrbitalPhysics
|
||||
public override void Start()
|
||||
{
|
||||
base.Start();
|
||||
|
||||
astroObject = _astroObject as ParameterizedAstroObject;
|
||||
|
||||
var periapsis = OrbitalHelper.GetPositionFromEccentricAnomaly(astroObject.Eccentricity, astroObject.SemiMajorAxis, astroObject.Inclination, astroObject.ArgumentOfPeriapsis, astroObject.LongitudeOfAscendingNode, 0f);
|
||||
var semiMinorDecending = OrbitalHelper.GetPositionFromEccentricAnomaly(astroObject.Eccentricity, astroObject.SemiMajorAxis, astroObject.Inclination, astroObject.ArgumentOfPeriapsis, astroObject.LongitudeOfAscendingNode, 90f);
|
||||
var a = astroObject.SemiMajorAxis;
|
||||
var b = a * Mathf.Sqrt(1 - astroObject.Eccentricity * astroObject.Eccentricity);
|
||||
|
||||
_semiMajorAxis = periapsis.normalized * a;
|
||||
_semiMinorAxis = semiMinorDecending.normalized * b;
|
||||
_upAxisDir = Vector3.Cross(_semiMajorAxis, _semiMinorAxis).normalized;
|
||||
_fociDistance = Mathf.Sqrt(a * a - b * b);
|
||||
}
|
||||
|
||||
// Literally the stock EllipticOrbitLine but for now I don't want to use the patches from CommonResources
|
||||
public override void Update()
|
||||
{
|
||||
AstroObject primaryAO = _astroObject?.GetPrimaryBody();
|
||||
if (primaryAO == null)
|
||||
{
|
||||
base.enabled = false;
|
||||
return;
|
||||
}
|
||||
Vector3 vector = primaryAO.transform.position + this._semiMajorAxis.normalized * this._fociDistance;
|
||||
float num = this.CalcProjectedAngleToCenter(vector, this._semiMajorAxis, this._semiMinorAxis, this._astroObject.transform.position);
|
||||
for (int i = 0; i < this._numVerts; i++)
|
||||
{
|
||||
float f = (float)i / (float)(this._numVerts - 1) * 3.1415927f * 2f - (num + 3.1415927f);
|
||||
this._verts[i] = this._semiMajorAxis * Mathf.Cos(f) + this._semiMinorAxis * Mathf.Sin(f);
|
||||
}
|
||||
this._lineRenderer.SetPositions(this._verts);
|
||||
base.transform.position = vector;
|
||||
base.transform.rotation = Quaternion.LookRotation(this._semiMinorAxis, this._upAxisDir);
|
||||
float num2 = this.DistanceToEllipticalOrbitLine(vector, this._semiMajorAxis, this._semiMinorAxis, this._upAxisDir, Locator.GetActiveCamera().transform.position);
|
||||
float widthMultiplier = Mathf.Min(num2 * (this._lineWidth / 1000f), this._maxLineWidth);
|
||||
float num3 = this._fade ? (1f - Mathf.Clamp01((num2 - this._fadeStartDist) / (this._fadeEndDist - this._fadeStartDist))) : 1f;
|
||||
this._lineRenderer.widthMultiplier = widthMultiplier;
|
||||
this._lineRenderer.startColor = new Color(this._color.r, this._color.g, this._color.b, num3 * num3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user