mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Still broken
This commit is contained in:
parent
4e6b6c4768
commit
2af194672e
@ -159,11 +159,11 @@ namespace NewHorizons.Builder.General
|
|||||||
var focalPointVelocity = focalPointMotion == null ? Vector3.zero : focalPointMotion.GetInitVelocity();
|
var focalPointVelocity = focalPointMotion == null ? Vector3.zero : focalPointMotion.GetInitVelocity();
|
||||||
|
|
||||||
var primaryInitialMotion = primary.gameObject.GetComponent<InitialMotion>();
|
var primaryInitialMotion = primary.gameObject.GetComponent<InitialMotion>();
|
||||||
primaryInitialMotion.SetValue("_initLinearDirection", v1.normalized);
|
primaryInitialMotion.SetValue("_initLinearDirection", primary.gameObject.transform.InverseTransformDirection(v1.normalized));
|
||||||
primaryInitialMotion.SetValue("_initLinearSpeed", v1.magnitude);
|
primaryInitialMotion.SetValue("_initLinearSpeed", v1.magnitude);
|
||||||
|
|
||||||
var secondaryInitialMotion = secondary.gameObject.GetComponent<InitialMotion>();
|
var secondaryInitialMotion = secondary.gameObject.GetComponent<InitialMotion>();
|
||||||
secondaryInitialMotion.SetValue("_initLinearDirection", v2.normalized);
|
secondaryInitialMotion.SetValue("_initLinearDirection", secondary.gameObject.transform.InverseTransformDirection(v2.normalized));
|
||||||
secondaryInitialMotion.SetValue("_initLinearSpeed", v2.magnitude);
|
secondaryInitialMotion.SetValue("_initLinearSpeed", v2.magnitude);
|
||||||
|
|
||||||
// InitialMotion already set its speed so we overwrite that
|
// InitialMotion already set its speed so we overwrite that
|
||||||
@ -179,9 +179,6 @@ namespace NewHorizons.Builder.General
|
|||||||
// If they have tracking orbits set the period
|
// If they have tracking orbits set the period
|
||||||
var period = 2 * Mathf.PI * Mathf.Sqrt(Mathf.Pow(r, exponent + 1) / (GravityVolume.GRAVITATIONAL_CONSTANT * totalMass));
|
var period = 2 * Mathf.PI * Mathf.Sqrt(Mathf.Pow(r, exponent + 1) / (GravityVolume.GRAVITATIONAL_CONSTANT * totalMass));
|
||||||
|
|
||||||
if (exponent == 1) period /= 3f;
|
|
||||||
|
|
||||||
// Only one of these won't be null, the other one gets done next tick
|
|
||||||
var trackingOrbitPrimary = primary.GetComponentInChildren<TrackingOrbitLine>();
|
var trackingOrbitPrimary = primary.GetComponentInChildren<TrackingOrbitLine>();
|
||||||
if (trackingOrbitPrimary != null)
|
if (trackingOrbitPrimary != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -8,7 +8,7 @@ namespace NewHorizons.Builder.General
|
|||||||
{
|
{
|
||||||
static class GravityBuilder
|
static class GravityBuilder
|
||||||
{
|
{
|
||||||
public static void Make(GameObject body, AstroObject ao, float surfaceAccel, float sphereOfInfluence, float surface, string falloffType)
|
public static GravityVolume Make(GameObject body, AstroObject ao, float surfaceAccel, float sphereOfInfluence, float surface, string falloffType)
|
||||||
{
|
{
|
||||||
GameObject gravityGO = new GameObject("GravityWell");
|
GameObject gravityGO = new GameObject("GravityWell");
|
||||||
gravityGO.transform.parent = body.transform;
|
gravityGO.transform.parent = body.transform;
|
||||||
@ -42,6 +42,8 @@ namespace NewHorizons.Builder.General
|
|||||||
gravityGO.SetActive(true);
|
gravityGO.SetActive(true);
|
||||||
|
|
||||||
ao.SetValue("_gravityVolume", GV);
|
ao.SetValue("_gravityVolume", GV);
|
||||||
|
|
||||||
|
return GV;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
32
NewHorizons/Builder/General/HeavenlyBodyBuilder.cs
Normal file
32
NewHorizons/Builder/General/HeavenlyBodyBuilder.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using NewHorizons.External;
|
||||||
|
using NewHorizons.OrbitalPhysics;
|
||||||
|
using NewHorizons.Utility;
|
||||||
|
using PacificEngine.OW_CommonResources.Game.Resource;
|
||||||
|
using PacificEngine.OW_CommonResources.Game.State;
|
||||||
|
using PacificEngine.OW_CommonResources.Geometry.Orbits;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace NewHorizons.Builder.General
|
||||||
|
{
|
||||||
|
public static class HeavenlyBodyBuilder
|
||||||
|
{
|
||||||
|
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 = new Gravity(G, bodyGravity == null ? 0 : bodyGravity.GetFalloffExponent(), bodyGravity == null ? 0 : bodyGravity.GetStandardGravitationalParameter() / G);
|
||||||
|
var parent = HeavenlyBody.FromString(config.Orbit.PrimaryBody);
|
||||||
|
var orbit = OrbitalHelper.KeplerCoordinatesFromOrbitModule(config.Orbit);
|
||||||
|
|
||||||
|
var hb = new HeavenlyBody(config.Name);
|
||||||
|
var planetoid = new Planet.Plantoid(size, gravity, body.transform.rotation, initialMotion._initAngularSpeed, parent, orbit);
|
||||||
|
|
||||||
|
Planet.mapping.Add(hb, planetoid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -17,31 +17,21 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
{
|
{
|
||||||
public static InitialMotion Make(GameObject body, AstroObject primaryBody, OWRigidbody OWRB, OrbitModule orbit)
|
public static InitialMotion Make(GameObject body, AstroObject primaryBody, OWRigidbody OWRB, OrbitModule orbit)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
ParameterizedInitialMotion initialMotion = body.AddComponent<ParameterizedInitialMotion>();
|
|
||||||
initialMotion.SetPrimary(primaryBody);
|
|
||||||
initialMotion.SetOrbitalParameters(
|
|
||||||
orbit.Eccentricity,
|
|
||||||
orbit.SemiMajorAxis,
|
|
||||||
orbit.Inclination,
|
|
||||||
orbit.LongitudeOfAscendingNode,
|
|
||||||
orbit.ArgumentOfPeriapsis,
|
|
||||||
orbit.TrueAnomaly);
|
|
||||||
initialMotion.SetValue("_initAngularSpeed", orbit.SiderealPeriod == 0 ? 0.02f : 1.0f / orbit.SiderealPeriod);
|
|
||||||
*/
|
|
||||||
|
|
||||||
InitialMotion initialMotion = body.AddComponent<InitialMotion>();
|
InitialMotion initialMotion = body.AddComponent<InitialMotion>();
|
||||||
return Update(initialMotion, body, primaryBody, OWRB, orbit);
|
return Update(initialMotion, body, primaryBody, OWRB, orbit);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static InitialMotion Update(InitialMotion initialMotion, GameObject body, AstroObject primaryBody, OWRigidbody OWRB, OrbitModule orbit)
|
public static InitialMotion Update(InitialMotion initialMotion, GameObject body, AstroObject primaryBody, OWRigidbody OWRB, OrbitModule orbit)
|
||||||
{
|
{
|
||||||
|
// Rotation
|
||||||
|
initialMotion.SetValue("_initAngularSpeed", orbit.SiderealPeriod == 0 ? 0f : 1.0f / orbit.SiderealPeriod);
|
||||||
|
|
||||||
|
var rotationAxis = Quaternion.AngleAxis(orbit.AxialTilt + orbit.Inclination, Vector3.right) * Vector3.up;
|
||||||
|
body.transform.rotation = Quaternion.FromToRotation(Vector3.up, rotationAxis);
|
||||||
|
|
||||||
|
initialMotion._orbitImpulseScalar = 0f;
|
||||||
if (!orbit.IsStatic)
|
if (!orbit.IsStatic)
|
||||||
{
|
{
|
||||||
initialMotion._orbitImpulseScalar = 0f;
|
|
||||||
|
|
||||||
if(primaryBody != null)
|
if(primaryBody != null)
|
||||||
{
|
{
|
||||||
initialMotion.SetPrimaryBody(primaryBody.GetAttachedOWRigidbody());
|
initialMotion.SetPrimaryBody(primaryBody.GetAttachedOWRigidbody());
|
||||||
@ -49,18 +39,14 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
if(gv != null)
|
if(gv != null)
|
||||||
{
|
{
|
||||||
var velocity = OrbitalHelper.GetVelocity(new OrbitalHelper.Gravity(primaryBody.GetGravityVolume()), orbit);
|
var velocity = OrbitalHelper.GetVelocity(new OrbitalHelper.Gravity(primaryBody.GetGravityVolume()), orbit);
|
||||||
initialMotion._initLinearDirection = velocity.normalized;
|
|
||||||
|
// 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);
|
||||||
initialMotion._initLinearSpeed = velocity.magnitude;
|
initialMotion._initLinearSpeed = velocity.magnitude;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rotation
|
|
||||||
//initialMotion.SetValue("_initAngularSpeed", orbit.SiderealPeriod == 0 ? 0f : 1.0f / orbit.SiderealPeriod);
|
|
||||||
initialMotion.SetValue("_initAngularSpeed", 0);
|
|
||||||
var rotationAxis = Quaternion.AngleAxis(orbit.AxialTilt + orbit.Inclination, Vector3.right) * Vector3.up;
|
|
||||||
body.transform.rotation = Quaternion.FromToRotation(Vector3.up, rotationAxis);
|
|
||||||
|
|
||||||
return initialMotion;
|
return initialMotion;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,15 +21,12 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
lineRenderer.useWorldSpace = false;
|
lineRenderer.useWorldSpace = false;
|
||||||
lineRenderer.loop = false;
|
lineRenderer.loop = false;
|
||||||
|
|
||||||
|
var ecc = config.Orbit.Eccentricity;
|
||||||
|
|
||||||
OrbitLine orbitLine;
|
OrbitLine orbitLine;
|
||||||
if (config.Orbit.Eccentricity == 0)
|
if (ecc == 0) orbitLine = orbitGO.AddComponent<OrbitLine>();
|
||||||
{
|
else if (ecc > 0 && ecc < 1) orbitLine = orbitGO.AddComponent<EllipticOrbitLine>();
|
||||||
orbitLine = orbitGO.AddComponent<ParameterizedOrbitLine>();
|
else orbitLine = orbitGO.AddComponent<TrackingOrbitLine>();
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
orbitLine = orbitGO.AddComponent<TrackingOrbitLine>();
|
|
||||||
}
|
|
||||||
|
|
||||||
var color = Color.white;
|
var color = Color.white;
|
||||||
if (config.Orbit.Tint != null) color = config.Orbit.Tint.ToColor32();
|
if (config.Orbit.Tint != null) color = config.Orbit.Tint.ToColor32();
|
||||||
|
|||||||
@ -10,6 +10,9 @@ using NewHorizons.Utility;
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using OWML.ModHelper;
|
using OWML.ModHelper;
|
||||||
using OWML.Utils;
|
using OWML.Utils;
|
||||||
|
using PacificEngine.OW_CommonResources.Game.Resource;
|
||||||
|
using PacificEngine.OW_CommonResources.Game.State;
|
||||||
|
using PacificEngine.OW_CommonResources.Geometry.Orbits;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -17,6 +20,7 @@ using System.Linq;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.SceneManagement;
|
using UnityEngine.SceneManagement;
|
||||||
|
using static PacificEngine.OW_CommonResources.Game.State.Planet;
|
||||||
using Logger = NewHorizons.Utility.Logger;
|
using Logger = NewHorizons.Utility.Logger;
|
||||||
|
|
||||||
namespace NewHorizons
|
namespace NewHorizons
|
||||||
@ -219,8 +223,6 @@ namespace NewHorizons
|
|||||||
|
|
||||||
Logger.Log($"Begin generation sequence of [{body.Config.Name}]");
|
Logger.Log($"Begin generation sequence of [{body.Config.Name}]");
|
||||||
|
|
||||||
body.Config.Orbit.AxialTilt = 0;
|
|
||||||
|
|
||||||
var go = new GameObject(body.Config.Name.Replace(" ", "").Replace("'", "") + "_Body");
|
var go = new GameObject(body.Config.Name.Replace(" ", "").Replace("'", "") + "_Body");
|
||||||
go.SetActive(false);
|
go.SetActive(false);
|
||||||
|
|
||||||
@ -233,8 +235,9 @@ namespace NewHorizons
|
|||||||
var ao = (AstroObject)outputTuple.Item1;
|
var ao = (AstroObject)outputTuple.Item1;
|
||||||
var owRigidBody = (OWRigidbody)outputTuple.Item2;
|
var owRigidBody = (OWRigidbody)outputTuple.Item2;
|
||||||
|
|
||||||
|
GravityVolume gv = null;
|
||||||
if (body.Config.Base.SurfaceGravity != 0)
|
if (body.Config.Base.SurfaceGravity != 0)
|
||||||
GravityBuilder.Make(go, ao, body.Config.Base.SurfaceGravity, sphereOfInfluence * (body.Config.Star != null ? 10f : 1f), body.Config.Base.SurfaceSize, body.Config.Base.GravityFallOff);
|
gv = GravityBuilder.Make(go, ao, body.Config.Base.SurfaceGravity, sphereOfInfluence * (body.Config.Star != null ? 10f : 1f), body.Config.Base.SurfaceSize, body.Config.Base.GravityFallOff);
|
||||||
|
|
||||||
if(body.Config.Base.HasReferenceFrame)
|
if(body.Config.Base.HasReferenceFrame)
|
||||||
RFVolumeBuilder.Make(go, owRigidBody, sphereOfInfluence);
|
RFVolumeBuilder.Make(go, owRigidBody, sphereOfInfluence);
|
||||||
@ -280,7 +283,7 @@ namespace NewHorizons
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Have to do this after setting position
|
// Have to do this after setting position
|
||||||
InitialMotionBuilder.Make(go, primaryBody, owRigidBody, body.Config.Orbit);
|
var initialMotion = InitialMotionBuilder.Make(go, primaryBody, owRigidBody, body.Config.Orbit);
|
||||||
|
|
||||||
// Spawning on other planets is a bit hacky so we do it last
|
// Spawning on other planets is a bit hacky so we do it last
|
||||||
if (body.Config.Spawn != null)
|
if (body.Config.Spawn != null)
|
||||||
@ -294,6 +297,8 @@ namespace NewHorizons
|
|||||||
|
|
||||||
if (ao.GetAstroObjectName() == AstroObject.Name.CustomString) AstroObjectLocator.RegisterCustomAstroObject(ao);
|
if (ao.GetAstroObjectName() == AstroObject.Name.CustomString) AstroObjectLocator.RegisterCustomAstroObject(ao);
|
||||||
|
|
||||||
|
HeavenlyBodyBuilder.Make(go, body.Config, sphereOfInfluence, gv, initialMotion);
|
||||||
|
|
||||||
return go;
|
return go;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
{
|
{
|
||||||
// The gravity doesnt have an affect on position so we put whatever
|
// The gravity doesnt have an affect on position so we put whatever
|
||||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
||||||
var kepler = KeplerCoordinates.fromTrueAnomaly(orbit.Eccentricity, orbit.SemiMajorAxis, orbit.Inclination + 90, orbit.ArgumentOfPeriapsis, orbit.LongitudeOfAscendingNode, orbit.TrueAnomaly);
|
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;
|
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
if(ao.SemiMajorAxis != 0)
|
if(ao.SemiMajorAxis != 0)
|
||||||
{
|
{
|
||||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
||||||
var kepler = KeplerCoordinates.fromTrueAnomaly(ao.Eccentricity, ao.SemiMajorAxis, ao.Inclination + 90, ao.ArgumentOfPeriapsis, ao.LongitudeOfAscendingNode, ao.TrueAnomaly);
|
var kepler = KeplerCoordinates.fromTrueAnomaly(ao.Eccentricity, ao.SemiMajorAxis, ao.Inclination, ao.ArgumentOfPeriapsis, ao.LongitudeOfAscendingNode, ao.TrueAnomaly);
|
||||||
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
if (semiMajorAxis != 0)
|
if (semiMajorAxis != 0)
|
||||||
{
|
{
|
||||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
||||||
var kepler = KeplerCoordinates.fromTrueAnomaly(eccentricity, semiMajorAxis, inclination + 90, argumentOfPeriapsis, longitudeOfAscendingNode, trueAnomaly);
|
var kepler = KeplerCoordinates.fromTrueAnomaly(eccentricity, semiMajorAxis, inclination, argumentOfPeriapsis, longitudeOfAscendingNode, trueAnomaly);
|
||||||
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
if (semiMajorAxis != 0)
|
if (semiMajorAxis != 0)
|
||||||
{
|
{
|
||||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, 1f, 100f);
|
||||||
var kepler = KeplerCoordinates.fromEccentricAnomaly(eccentricity, semiMajorAxis, inclination + 90, argumentOfPeriapsis, longitudeOfAscendingNode, eccentricAnomaly);
|
var kepler = KeplerCoordinates.fromEccentricAnomaly(eccentricity, semiMajorAxis, inclination, argumentOfPeriapsis, longitudeOfAscendingNode, eccentricAnomaly);
|
||||||
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
public static Vector3 GetVelocity(Gravity gravity, OrbitModule orbit)
|
public static Vector3 GetVelocity(Gravity gravity, OrbitModule orbit)
|
||||||
{
|
{
|
||||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, gravity.Exponent, gravity.Mass);
|
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, gravity.Exponent, gravity.Mass);
|
||||||
var kepler = KeplerCoordinates.fromTrueAnomaly(orbit.Eccentricity, orbit.SemiMajorAxis, orbit.Inclination + 90, orbit.ArgumentOfPeriapsis, orbit.LongitudeOfAscendingNode, orbit.TrueAnomaly);
|
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;
|
var vel = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item2;
|
||||||
Logger.Log($"Velocity : {vel}");
|
Logger.Log($"Velocity : {vel}");
|
||||||
return vel;
|
return vel;
|
||||||
@ -93,12 +93,17 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
public static Vector3 GetVelocity(Gravity gravity, ParameterizedAstroObject ao)
|
public static Vector3 GetVelocity(Gravity gravity, ParameterizedAstroObject ao)
|
||||||
{
|
{
|
||||||
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, gravity.Exponent, gravity.Mass);
|
var crGravity = new CRGravity(GravityVolume.GRAVITATIONAL_CONSTANT, gravity.Exponent, gravity.Mass);
|
||||||
var kepler = KeplerCoordinates.fromTrueAnomaly(ao.Eccentricity, ao.SemiMajorAxis, ao.Inclination + 90, ao.ArgumentOfPeriapsis, ao.LongitudeOfAscendingNode, ao.TrueAnomaly);
|
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;
|
var vel = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item2;
|
||||||
Logger.Log($"Velocity : {vel}");
|
Logger.Log($"Velocity : {vel}");
|
||||||
return vel;
|
return vel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static KeplerCoordinates KeplerCoordinatesFromOrbitModule(OrbitModule orbit)
|
||||||
|
{
|
||||||
|
return KeplerCoordinates.fromTrueAnomaly(orbit.Eccentricity, orbit.SemiMajorAxis, orbit.Inclination, orbit.ArgumentOfPeriapsis, orbit.LongitudeOfAscendingNode, orbit.TrueAnomaly);
|
||||||
|
}
|
||||||
|
|
||||||
public class Gravity
|
public class Gravity
|
||||||
{
|
{
|
||||||
public float Exponent { get; }
|
public float Exponent { get; }
|
||||||
|
|||||||
@ -24,7 +24,7 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
|
|
||||||
public float Inclination
|
public float Inclination
|
||||||
{
|
{
|
||||||
get { return _keplerCoordinates.inclinationAngle - 90; }
|
get { return _keplerCoordinates.inclinationAngle; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public float ArgumentOfPeriapsis
|
public float ArgumentOfPeriapsis
|
||||||
@ -44,12 +44,12 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
|
|
||||||
public void SetKeplerCoordinatesFromOrbitModule(OrbitModule orbit)
|
public void SetKeplerCoordinatesFromOrbitModule(OrbitModule orbit)
|
||||||
{
|
{
|
||||||
_keplerCoordinates = KeplerCoordinates.fromTrueAnomaly(orbit.Eccentricity, orbit.SemiMajorAxis, orbit.Inclination + 90, orbit.ArgumentOfPeriapsis, orbit.LongitudeOfAscendingNode, orbit.TrueAnomaly);
|
_keplerCoordinates = KeplerCoordinates.fromTrueAnomaly(orbit.Eccentricity, orbit.SemiMajorAxis, orbit.Inclination, orbit.ArgumentOfPeriapsis, orbit.LongitudeOfAscendingNode, orbit.TrueAnomaly);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetKeplerCoordinatesFromTrueAnomaly(float ecc, float a, float i, float p, float l, float trueAnomaly)
|
public void SetKeplerCoordinatesFromTrueAnomaly(float ecc, float a, float i, float p, float l, float trueAnomaly)
|
||||||
{
|
{
|
||||||
_keplerCoordinates = KeplerCoordinates.fromTrueAnomaly(ecc, a, i + 90, p, l, trueAnomaly);
|
_keplerCoordinates = KeplerCoordinates.fromTrueAnomaly(ecc, a, i, p, l, trueAnomaly);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
|||||||
@ -21,8 +21,8 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
|
|
||||||
astroObject = _astroObject as ParameterizedAstroObject;
|
astroObject = _astroObject as ParameterizedAstroObject;
|
||||||
|
|
||||||
var periapsis = OrbitalHelper.GetPositionFromEccentricAnomaly(astroObject.Eccentricity, astroObject.SemiMajorAxis, astroObject.Inclination + 90, astroObject.ArgumentOfPeriapsis, astroObject.LongitudeOfAscendingNode, 0f);
|
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 + 90, astroObject.ArgumentOfPeriapsis, astroObject.LongitudeOfAscendingNode, 90f);
|
var semiMinorDecending = OrbitalHelper.GetPositionFromEccentricAnomaly(astroObject.Eccentricity, astroObject.SemiMajorAxis, astroObject.Inclination, astroObject.ArgumentOfPeriapsis, astroObject.LongitudeOfAscendingNode, 90f);
|
||||||
var a = astroObject.SemiMajorAxis;
|
var a = astroObject.SemiMajorAxis;
|
||||||
var b = a * Mathf.Sqrt(1 - astroObject.Eccentricity * astroObject.Eccentricity);
|
var b = a * Mathf.Sqrt(1 - astroObject.Eccentricity * astroObject.Eccentricity);
|
||||||
|
|
||||||
@ -31,5 +31,31 @@ namespace NewHorizons.OrbitalPhysics
|
|||||||
_upAxisDir = Vector3.Cross(_semiMajorAxis, _semiMinorAxis).normalized;
|
_upAxisDir = Vector3.Cross(_semiMajorAxis, _semiMinorAxis).normalized;
|
||||||
_fociDistance = Mathf.Sqrt(a * a - b * b);
|
_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 astroObject = (this._astroObject != null) ? this._astroObject.GetPrimaryBody() : null;
|
||||||
|
if (astroObject == null)
|
||||||
|
{
|
||||||
|
base.enabled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Vector3 vector = astroObject.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