diff --git a/NewHorizons.zip b/NewHorizons.zip index c55f3ff3..0a454348 100644 Binary files a/NewHorizons.zip and b/NewHorizons.zip differ diff --git a/NewHorizons/Build/NewHorizons.dll b/NewHorizons/Build/NewHorizons.dll index 7bc4c86b..d4087e5e 100644 Binary files a/NewHorizons/Build/NewHorizons.dll and b/NewHorizons/Build/NewHorizons.dll differ diff --git a/NewHorizons/Build/NewHorizons.pdb b/NewHorizons/Build/NewHorizons.pdb index 0929c565..661d8722 100644 Binary files a/NewHorizons/Build/NewHorizons.pdb and b/NewHorizons/Build/NewHorizons.pdb differ diff --git a/NewHorizons/Build/PacificEngine.OW_CommonResources.dll b/NewHorizons/Build/PacificEngine.OW_CommonResources.dll new file mode 100644 index 00000000..a224fcf8 Binary files /dev/null and b/NewHorizons/Build/PacificEngine.OW_CommonResources.dll differ diff --git a/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs b/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs index 6f4ebad6..5689cf15 100644 --- a/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs +++ b/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs @@ -1,6 +1,6 @@ using NewHorizons.External; using NewHorizons.OrbitalPhysics; -using NewHorizons.Utility; +using NewHorizons.Utility; using PacificEngine.OW_CommonResources.Game.Resource; using PacificEngine.OW_CommonResources.Game.State; using PacificEngine.OW_CommonResources.Geometry.Orbits; @@ -15,22 +15,57 @@ namespace NewHorizons.Builder.General { public static class HeavenlyBodyBuilder { + private static Dictionary bodyName = new Dictionary(); + public static void Make(GameObject body, IPlanetConfig config, float SOI, GravityVolume bodyGravity, InitialMotion initialMotion, AstroObject ao) { 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 gravity = Gravity.of(bodyGravity == null ? 2f : bodyGravity.GetFalloffExponent(), bodyGravity == null ? 0 : bodyGravity.GetStandardGravitationalParameter() / G); + var parent = getBody(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); + var hb = getBody(config.Name); + if (hb == null) + { + hb = addHeavenlyBody(config.Name); + } + var planetoid = new Planet.Plantoid(size, gravity, body.transform.rotation, initialMotion._initAngularSpeed, parent, orbit); + + var mapping = Planet.defaultMapping; + mapping[hb] = planetoid; + Planet.defaultMapping = mapping; + } - Planet.mapping.Add(hb, planetoid); - Planet.defaultMapping.Add(hb, planetoid); + private static HeavenlyBody addHeavenlyBody(string name) + { + var hb = new HeavenlyBody(name); + bodyName.Add(name, hb); + + var astroLookup = Position.AstroLookup; + astroLookup.Add(hb, () => AstroObjectLocator.GetAstroObject(name)); + Position.AstroLookup = astroLookup; - Position.AstroLookup.Add(hb, () => ao); - Position.BodyLookup.Add(hb, () => ao?.GetAttachedOWRigidbody()); + var bodyLookup = Position.BodyLookup; + bodyLookup.Add(hb, () => AstroObjectLocator.GetAstroObject(name)?.GetAttachedOWRigidbody()); + Position.BodyLookup = bodyLookup; + + return hb; + } + + private static HeavenlyBody getBody(string name) + { + if (bodyName.ContainsKey(name)) + { + return bodyName[name]; + } + + var hb = Position.find(AstroObjectLocator.GetAstroObject(name)); + if (hb != null) + { + bodyName.Add(name, hb); + } + return hb; } } } diff --git a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs index eaeba4e3..13304cf7 100644 --- a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs +++ b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs @@ -24,8 +24,8 @@ namespace NewHorizons.Builder.Orbital var ecc = config.Orbit.Eccentricity; OrbitLine orbitLine; - if (ecc == 0) orbitLine = orbitGO.AddComponent(); - else if (ecc > 0 && ecc < 1) orbitLine = orbitGO.AddComponent(); + if (ecc == 0) orbitLine = orbitGO.AddComponent(); + else if (ecc > 0 && ecc < 1) orbitLine = orbitGO.AddComponent(); else orbitLine = orbitGO.AddComponent(); var color = Color.white;