mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Fix most planet velocities
This commit is contained in:
parent
f15157a124
commit
860ffd2c95
@ -25,7 +25,7 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
|
|
||||||
// Rotation
|
// Rotation
|
||||||
initialMotion._initAngularSpeed = orbit.SiderealPeriod == 0 ? 0f : 2f * Mathf.PI / (orbit.SiderealPeriod * 60f);
|
initialMotion._initAngularSpeed = orbit.SiderealPeriod == 0 ? 0f : 2f * Mathf.PI / (orbit.SiderealPeriod * 60f);
|
||||||
//initialMotion._primaryBody = primaryBody?.GetAttachedOWRigidbody();
|
initialMotion._primaryBody = primaryBody?.GetAttachedOWRigidbody();
|
||||||
|
|
||||||
var rotationAxis = Quaternion.AngleAxis(orbit.AxialTilt + 90f, Vector3.right) * Vector3.up;
|
var rotationAxis = Quaternion.AngleAxis(orbit.AxialTilt + 90f, Vector3.right) * Vector3.up;
|
||||||
initialMotion._rotationAxis = rotationAxis;
|
initialMotion._rotationAxis = rotationAxis;
|
||||||
@ -40,7 +40,8 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
var secondaryGravity = new Gravity(secondaryBody.GetGravityVolume());
|
var secondaryGravity = new Gravity(secondaryBody.GetGravityVolume());
|
||||||
var velocity = orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialVelocity;
|
var velocity = orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialVelocity;
|
||||||
|
|
||||||
initialMotion._cachedInitVelocity = velocity + primaryBody?.GetComponent<InitialMotion>()?.GetInitVelocity() ?? Vector3.zero;
|
var parentVelocity = primaryBody?.GetComponent<InitialMotion>()?.GetInitVelocity() ?? Vector3.zero;
|
||||||
|
initialMotion._cachedInitVelocity = velocity + parentVelocity;
|
||||||
initialMotion._isInitVelocityDirty = false;
|
initialMotion._isInitVelocityDirty = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -50,7 +51,6 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
initialMotion._initLinearSpeed = 0f;
|
initialMotion._initLinearSpeed = 0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
body.SetActive(true);
|
body.SetActive(true);
|
||||||
|
|
||||||
return initialMotion;
|
return initialMotion;
|
||||||
|
|||||||
@ -53,9 +53,34 @@ namespace NewHorizons.Components.Orbital
|
|||||||
|
|
||||||
var p = semiMajorAxis * (1 - (eccentricity * eccentricity)); // Semi-latus rectum
|
var p = semiMajorAxis * (1 - (eccentricity * eccentricity)); // Semi-latus rectum
|
||||||
var r = p / (1 + eccentricity * Mathf.Cos(f));
|
var r = p / (1 + eccentricity * Mathf.Cos(f));
|
||||||
var mu = GravityVolume.GRAVITATIONAL_CONSTANT * primaryMass;
|
|
||||||
var h = Mathf.Sqrt(mu * p);
|
var G = GravityVolume.GRAVITATIONAL_CONSTANT;
|
||||||
var v = Mathf.Sqrt(mu * ((2 / r) - (1 / semiMajorAxis)));
|
var mu = G * (primaryMass + secondaryMass);
|
||||||
|
|
||||||
|
var r_p = semiMajorAxis * (1 - eccentricity);
|
||||||
|
var r_a = semiMajorAxis * (1 + eccentricity);
|
||||||
|
|
||||||
|
float v;
|
||||||
|
if(primaryGravity.Power == 1)
|
||||||
|
{
|
||||||
|
// Have to deal with a limit
|
||||||
|
if(eccentricity == 0)
|
||||||
|
{
|
||||||
|
var v2 = 2 * mu * (Mathf.Log(r_a / r) + (1 / 2f));
|
||||||
|
v = Mathf.Sqrt(v2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var coeff = (r_p * r_p) / (r_p * r_p - r_a * r_a);
|
||||||
|
var v2 = 2 * mu * secondaryMass * (coeff * Mathf.Log(r_p / r_a) + Mathf.Log(r_a / r));
|
||||||
|
v = Mathf.Sqrt(v2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
v = Mathf.Sqrt(G * primaryMass * ((2f / r) - (1f / semiMajorAxis)));
|
||||||
|
}
|
||||||
|
|
||||||
var semiMinorAxis = semiMajorAxis * Mathf.Sqrt(1 - (eccentricity * eccentricity));
|
var semiMinorAxis = semiMajorAxis * Mathf.Sqrt(1 - (eccentricity * eccentricity));
|
||||||
var focusDistance = Mathf.Sqrt((semiMajorAxis * semiMajorAxis) - (semiMinorAxis * semiMinorAxis));
|
var focusDistance = Mathf.Sqrt((semiMajorAxis * semiMajorAxis) - (semiMinorAxis * semiMinorAxis));
|
||||||
|
|
||||||
@ -72,10 +97,10 @@ namespace NewHorizons.Components.Orbital
|
|||||||
var pos = new Vector3(r * n_p.x, 0f, r * n_p.y);
|
var pos = new Vector3(r * n_p.x, 0f, r * n_p.y);
|
||||||
var vel = new Vector3(v * n_v.x, 0f, v * n_v.y);
|
var vel = new Vector3(v * n_v.x, 0f, v * n_v.y);
|
||||||
|
|
||||||
orbitalParameters.InitialPosition = R3 * pos;
|
orbitalParameters.InitialPosition = R1 * R2 * R3 * pos;
|
||||||
orbitalParameters.InitialVelocity = R3 * vel;
|
orbitalParameters.InitialVelocity = R1 * R2 * R3 * vel;
|
||||||
|
|
||||||
Logger.Log($"POSITION: {orbitalParameters.InitialPosition}, {orbitalParameters.InitialVelocity}, {n_p}, {n_v}");
|
Logger.Log($"POSITION: {orbitalParameters.InitialPosition}, {orbitalParameters.InitialVelocity}, {n_p}, {n_v}, {primaryMass}");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
var x = r * (Mathf.Cos(la) * Mathf.Cos(ap + f) - Mathf.Sin(la) * Mathf.Sin(ap + f) * Mathf.Cos(i));
|
var x = r * (Mathf.Cos(la) * Mathf.Cos(ap + f) - Mathf.Sin(la) * Mathf.Sin(ap + f) * Mathf.Cos(i));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user