From 0e51c14b740fbf414c1a2dd452d035871981b220 Mon Sep 17 00:00:00 2001 From: "Nick J. Connors" Date: Sat, 15 Jan 2022 01:06:23 -0500 Subject: [PATCH] Improved gravitational sphere of influence calculations --- NewHorizons/Builder/General/BaseBuilder.cs | 8 ++++++++ NewHorizons/Builder/General/GravityBuilder.cs | 2 +- NewHorizons/Builder/Props/PropBuilder.cs | 2 ++ NewHorizons/Main.cs | 15 ++++++++++++++- NewHorizons/Utility/Patches.cs | 9 +++++++-- 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/NewHorizons/Builder/General/BaseBuilder.cs b/NewHorizons/Builder/General/BaseBuilder.cs index 5033daab..43cf6059 100644 --- a/NewHorizons/Builder/General/BaseBuilder.cs +++ b/NewHorizons/Builder/General/BaseBuilder.cs @@ -49,6 +49,14 @@ namespace NewHorizons.Builder.General astroObject.SetValue("_customName", config.Name); astroObject.SetValue("_primaryBody", primaryBody); + // Expand gravitational sphere of influence of the primary to encompass this body if needed + if(primaryBody != null && !config.Orbit.IsStatic) + { + var primarySphereOfInfluence = primaryBody.GetGravityVolume().gameObject.GetComponent(); + if (primarySphereOfInfluence.radius < config.Orbit.SemiMajorAxis) + primarySphereOfInfluence.radius = config.Orbit.SemiMajorAxis * 1.5f; + } + if (config.Orbit.IsTidallyLocked) { var alignment = body.AddComponent(); diff --git a/NewHorizons/Builder/General/GravityBuilder.cs b/NewHorizons/Builder/General/GravityBuilder.cs index ae2b2b1c..3168b5eb 100644 --- a/NewHorizons/Builder/General/GravityBuilder.cs +++ b/NewHorizons/Builder/General/GravityBuilder.cs @@ -20,7 +20,7 @@ namespace NewHorizons.Builder.General if (exponent == 2f) gravityRadius = Mathf.Sqrt(gravityRadius); // To let you actually orbit things the way you would expect we cap this at 4x the diameter if its not a star or black hole (this is what giants deep has) - if (config.Star != null || config.Singularity != null) gravityRadius = Mathf.Min(gravityRadius, 4 * config.Base.SurfaceSize); + if (config.Star == null && config.Singularity == null) gravityRadius = Mathf.Min(gravityRadius, 4 * config.Base.SurfaceSize); else gravityRadius = Mathf.Min(gravityRadius, 15 * config.Base.SurfaceSize); if (config.Base.SphereOfInfluence != 0f) gravityRadius = config.Base.SphereOfInfluence; diff --git a/NewHorizons/Builder/Props/PropBuilder.cs b/NewHorizons/Builder/Props/PropBuilder.cs index 554a148a..a23afc08 100644 --- a/NewHorizons/Builder/Props/PropBuilder.cs +++ b/NewHorizons/Builder/Props/PropBuilder.cs @@ -100,6 +100,7 @@ namespace NewHorizons.Builder.Props component.SetSector(sector); } + foreach (var component in prop.GetComponentsInChildren()) { // TODO: Make this work or smthng @@ -109,6 +110,7 @@ namespace NewHorizons.Builder.Props var enabledField = component.GetType().GetField("enabled"); if(enabledField != null && enabledField.FieldType == typeof(bool)) enabledField.SetValue(component, true); } + prop.transform.position = position == null ? go.transform.position : go.transform.TransformPoint((Vector3)position); diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 01313223..f301d6ea 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -202,6 +202,19 @@ namespace NewHorizons Logger.Log($"Is the player warping in? {IsWarping}"); if (IsWarping) Instance.ModHelper.Events.Unity.FireInNUpdates(() => _shipWarpController.WarpIn(), 1); IsWarping = false; + + // Fix some camera stuff + /* + foreach(var owc in GameObject.FindObjectsOfType()) + { + var far = Main.FurthestOrbit * 10f; + if (owc.farClipPlane < far) + { + owc.farClipPlane = far; + owc.mainCamera.farClipPlane = far; + } + } + */ } #region TitleScreen @@ -515,7 +528,7 @@ namespace NewHorizons LavaBuilder.Make(go, sector, rb, lava); } - if (body.Config.Lava != null) + if (body.Config.Lava != null) LavaBuilder.Make(go, sector, rb, body.Config.Lava); // Backwards compatability diff --git a/NewHorizons/Utility/Patches.cs b/NewHorizons/Utility/Patches.cs index e3ac6911..da9ed69a 100644 --- a/NewHorizons/Utility/Patches.cs +++ b/NewHorizons/Utility/Patches.cs @@ -80,16 +80,21 @@ namespace NewHorizons.Utility public static void OnMapControllerAwake(MapController __instance, ref float ____maxPanDistance, ref float ____maxZoomDistance, ref float ____minPitchAngle, ref float ____zoomSpeed) { + Logger.Log($"Other far? {Main.FurthestOrbit}"); ____maxPanDistance = Main.FurthestOrbit * 1.5f; ____maxZoomDistance *= 6f; ____minPitchAngle = -90f; ____zoomSpeed *= 4f; - __instance._mapCamera.farClipPlane = Main.FurthestOrbit * 3f; + __instance._mapCamera.farClipPlane = Main.FurthestOrbit * 10f; } public static void OnOWCameraAwake(OWCamera __instance) { - __instance.farClipPlane *= 4f; + /* + var far = Main.FurthestOrbit * 10f; + __instance.farClipPlane = far; + __instance.mainCamera.farClipPlane = far; + */ } public static bool OnSunLightParamUpdaterLateUpdate(SunLightParamUpdater __instance)