Fix infinite loop loading error

This commit is contained in:
Nick J. Connors 2021-12-30 01:43:10 -05:00
parent 207c4cdce5
commit 48a811809d
3 changed files with 51 additions and 19 deletions

View File

@ -1,6 +1,7 @@
using NewHorizons.External;
using NewHorizons.OrbitalPhysics;
using NewHorizons.Utility;
using OWML.Utils;
using PacificEngine.OW_CommonResources.Game.Resource;
using PacificEngine.OW_CommonResources.Game.State;
using PacificEngine.OW_CommonResources.Geometry.Orbits;
@ -20,8 +21,16 @@ 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 = Gravity.of(0, 0);
if(bodyGravity != null)
{
var G = GravityVolume.GRAVITATIONAL_CONSTANT;
var exponent = bodyGravity.GetFalloffExponent();
var mass = bodyGravity._surfaceAcceleration * Mathf.Pow(bodyGravity._upperSurfaceRadius, exponent) / G;
gravity = Gravity.of(bodyGravity == null ? 2f : exponent, bodyGravity == null ? 0 : mass);
}
var parent = GetBody(config.Orbit.PrimaryBody);
var orbit = OrbitalHelper.KeplerCoordinatesFromOrbitModule(config.Orbit);
@ -35,6 +44,24 @@ namespace NewHorizons.Builder.General
var mapping = Planet.defaultMapping;
mapping[hb] = planetoid;
Planet.defaultMapping = mapping;
// Fix for binary focal points
var focalPoint = Position.AstroLookup[parent].Invoke()?.gameObject.GetComponent<BinaryFocalPoint>();
if (focalPoint != null)
{
var primary = Position.getBody(GetBody(focalPoint.PrimaryName));
var secondary = Position.getBody(GetBody(focalPoint.SecondaryName));
if(primary != null && secondary != null)
{
var exponent = ((primary?.GetAttachedGravityVolume()?.GetValue<float>("_falloffExponent") ?? 2f) + (secondary?.GetAttachedGravityVolume()?.GetValue<float>("_falloffExponent") ?? 2f)) / 2f;
var mass = ((primary?.GetAttachedGravityVolume()?.GetValue<float>("_gravitationalMass") ?? ((primary?.GetMass() ?? 0f) * 1000f)) + (secondary?.GetAttachedGravityVolume()?.GetValue<float>("_gravitationalMass") ?? ((secondary?.GetMass() ?? 0f) * 1000f))) / 4f;
var currentValue = Planet.mapping[parent];
var newValue = new Planet.Plantoid(currentValue.size, Gravity.of(exponent, mass), currentValue.state);
Planet.defaultMapping[parent] = newValue;
}
}
}
private static HeavenlyBody AddHeavenlyBody(string name)

View File

@ -89,33 +89,44 @@ namespace NewHorizons
(b.Config.Orbit.IsMoon ? 2 : 1)
))).ToList();
var flagNoneLoadedThisPass = true;
var count = 0;
while(toLoad.Count != 0)
{
Logger.Log($"Starting body loading pass #{++count}");
var flagNoneLoadedThisPass = true;
foreach (var body in toLoad)
{
if (LoadBody(body))
flagNoneLoadedThisPass = false;
if (LoadBody(body)) flagNoneLoadedThisPass = false;
}
if (flagNoneLoadedThisPass)
{
Logger.LogWarning("No objects were loaded this pass");
// Try again but default to sun
foreach(var body in toLoad)
{
if (LoadBody(body, true))
flagNoneLoadedThisPass = false;
}
if(flagNoneLoadedThisPass)
{
// Give up
Logger.Log($"Couldn't finish adding bodies.");
return;
if (LoadBody(body, true)) flagNoneLoadedThisPass = false;
}
}
if (flagNoneLoadedThisPass)
{
// Give up
Logger.Log($"Couldn't finish adding bodies.");
return;
}
toLoad = NextPassBodies;
NextPassBodies = new List<NewHorizonsBody>();
// Infinite loop failsafe
if (count > 10)
{
Logger.Log("Something went wrong");
break;
}
}
Logger.Log("Done loading bodies");
// I don't know what these do but they look really weird from a distance
Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => PlanetDestroyer.RemoveDistantProxyClones());
}

View File

@ -35,7 +35,6 @@ namespace NewHorizons.OrbitalPhysics
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
}
Logger.Log($"Position : {pos}");
return pos;
}
@ -49,7 +48,6 @@ namespace NewHorizons.OrbitalPhysics
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
}
Logger.Log($"Position : {pos}");
return pos;
}
@ -63,7 +61,6 @@ namespace NewHorizons.OrbitalPhysics
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
}
Logger.Log($"Position : {pos}");
return pos;
}
@ -77,7 +74,6 @@ namespace NewHorizons.OrbitalPhysics
pos = PacificEngine.OW_CommonResources.Geometry.Orbits.OrbitHelper.toCartesian(crGravity, 0f, kepler).Item1;
}
Logger.Log($"Position : {pos}");
return pos;
}
@ -86,7 +82,6 @@ namespace NewHorizons.OrbitalPhysics
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;
}
@ -95,7 +90,6 @@ namespace NewHorizons.OrbitalPhysics
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;
}