mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Flat circular orbits work
This commit is contained in:
parent
b02d98f0fc
commit
a319f0bb60
@ -45,8 +45,7 @@ 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;
|
||||||
|
|
||||||
// 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 = velocity.normalized;
|
||||||
initialMotion._initLinearDirection = body.transform.InverseTransformDirection(velocity.normalized);
|
|
||||||
initialMotion._initLinearSpeed = velocity.magnitude;
|
initialMotion._initLinearSpeed = velocity.magnitude;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,13 +63,13 @@ namespace NewHorizons.Components.Orbital
|
|||||||
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));
|
||||||
var y = r * (Mathf.Sin(la) * Mathf.Cos(ap + f) - Mathf.Cos(la) * Mathf.Sin(ap + f) * Mathf.Cos(i));
|
var y = r * (Mathf.Sin(la) * Mathf.Cos(ap + f) - Mathf.Cos(la) * Mathf.Sin(ap + f) * Mathf.Cos(i));
|
||||||
var z = r * (Mathf.Sin(i) * Mathf.Sin(ap + f));
|
var z = r * (Mathf.Sin(i) * Mathf.Sin(ap + f));
|
||||||
orbitalParameters.InitialPosition = new Vector3(x, z, y);
|
orbitalParameters.InitialPosition = new Vector3(x, y, z);
|
||||||
|
|
||||||
var coefficient = h * eccentricity * Mathf.Sin(f) / (r * p);
|
var coefficient = h * eccentricity * Mathf.Sin(f) / (r * p);
|
||||||
var vx = x * coefficient - (h / r) * (Mathf.Cos(la) * Mathf.Sin(ap + f) + Mathf.Sin(la) * Mathf.Cos(ap + f) * Mathf.Cos(i));
|
var vx = x * coefficient - (h / r) * (Mathf.Cos(la) * Mathf.Sin(ap + f) + Mathf.Sin(la) * Mathf.Cos(ap + f) * Mathf.Cos(i));
|
||||||
var vy = y * coefficient - (h / r) * (Mathf.Sin(la) * Mathf.Sin(ap + f) - Mathf.Cos(la) * Mathf.Cos(ap + f) * Mathf.Cos(i));
|
var vy = y * coefficient - (h / r) * (Mathf.Sin(la) * Mathf.Sin(ap + f) - Mathf.Cos(la) * Mathf.Cos(ap + f) * Mathf.Cos(i));
|
||||||
var vz = z * coefficient + (h / r) * (Mathf.Sin(i) * Mathf.Cos(ap + f));
|
var vz = z * coefficient + (h / r) * (Mathf.Sin(i) * Mathf.Cos(ap + f));
|
||||||
orbitalParameters.InitialVelocity = new Vector3(vx, vz, vy);
|
orbitalParameters.InitialVelocity = new Vector3(vx, vy, vz);
|
||||||
|
|
||||||
return orbitalParameters;
|
return orbitalParameters;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -364,7 +364,10 @@ namespace NewHorizons.Handlers
|
|||||||
{
|
{
|
||||||
var primaryGravity = new Gravity(primaryBody.GetGravityVolume());
|
var primaryGravity = new Gravity(primaryBody.GetGravityVolume());
|
||||||
var secondaryGravity = new Gravity(secondaryBody.GetGravityVolume());
|
var secondaryGravity = new Gravity(secondaryBody.GetGravityVolume());
|
||||||
go.transform.position = body.Config.Orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialPosition + primaryBody.transform.position;
|
|
||||||
|
var relativePosition = body.Config.Orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialPosition;
|
||||||
|
// Rotate it 90 degrees bc reasons
|
||||||
|
go.transform.position = Quaternion.AngleAxis(90, Vector3.left) * relativePosition + primaryBody.transform.position;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user