diff --git a/NewHorizons/Builder/Body/GeometryBuilder.cs b/NewHorizons/Builder/Body/GeometryBuilder.cs index dc7c99cf..1c59724b 100644 --- a/NewHorizons/Builder/Body/GeometryBuilder.cs +++ b/NewHorizons/Builder/Body/GeometryBuilder.cs @@ -30,6 +30,11 @@ namespace NewHorizons.Builder.Body { groundGO.transform.localScale *= 2; // Multiply by 2 to match top layer } + + var superGroup = planetGO.GetComponent(); + // idk if we need to set _superGroup manually since it does that in Awake, but it's done everywhere else so wtv + if (superGroup != null) groundGO.AddComponent()._superGroup = superGroup; + groundGO.SetActive(true); return groundGO; diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index f4954af5..ecbbee5c 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -178,14 +178,11 @@ namespace NewHorizons.Builder.Body light.color = lightColour; ambientLight.color = new Color(lightColour.r, lightColour.g, lightColour.b, lightColour.a == 0 ? 0.0001f : lightColour.a); + // used to use CopyPropertiesFrom, but that doesnt work here. instead, just copy settings from unity explorer var faceActiveCamera = sunLight.AddComponent(); - faceActiveCamera.CopyPropertiesFrom(_sunLight.GetComponent()); + faceActiveCamera._useLookAt = true; var csmTextureCacher = sunLight.AddComponent(); - csmTextureCacher.CopyPropertiesFrom(_sunLight.GetComponent()); - csmTextureCacher._light = light; var proxyShadowLight = sunLight.AddComponent(); - proxyShadowLight.CopyPropertiesFrom(_sunLight.GetComponent()); - proxyShadowLight._light = light; sunLight.name = "StarLight"; diff --git a/NewHorizons/Builder/General/RigidBodyBuilder.cs b/NewHorizons/Builder/General/RigidBodyBuilder.cs index ebfcd11e..9a0d5186 100644 --- a/NewHorizons/Builder/General/RigidBodyBuilder.cs +++ b/NewHorizons/Builder/General/RigidBodyBuilder.cs @@ -1,13 +1,12 @@ -using NewHorizons.External.Configs; using NewHorizons.Utility; using UnityEngine; namespace NewHorizons.Builder.General { public static class RigidBodyBuilder { - public static OWRigidbody Make(GameObject body, PlanetConfig config) + public static OWRigidbody Make(GameObject body, float sphereOfInfluence) { - body.AddComponent(); + body.AddComponent()._bounds.radius = sphereOfInfluence; Rigidbody rigidBody = body.AddComponent(); rigidBody.mass = 10000; diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 45520195..ea235665 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -346,10 +346,12 @@ namespace NewHorizons.Handlers body.Config.Base.showMinimap = false; body.Config.Base.hasMapMarker = false; - var owRigidBody = RigidBodyBuilder.Make(go, body.Config); + const float sphereOfInfluence = 2000f; + + var owRigidBody = RigidBodyBuilder.Make(go, sphereOfInfluence); var ao = AstroObjectBuilder.Make(go, null, body.Config, false); - var sector = SectorBuilder.Make(go, owRigidBody, 2000f); + var sector = SectorBuilder.Make(go, owRigidBody, sphereOfInfluence); ao._rootSector = sector; ao._type = AstroObject.Type.None; @@ -419,10 +421,10 @@ namespace NewHorizons.Handlers }; } - var owRigidBody = RigidBodyBuilder.Make(go, body.Config); - var ao = AstroObjectBuilder.Make(go, primaryBody, body.Config, false); - var sphereOfInfluence = GetSphereOfInfluence(body); + + var owRigidBody = RigidBodyBuilder.Make(go, sphereOfInfluence); + var ao = AstroObjectBuilder.Make(go, primaryBody, body.Config, false); var sector = SectorBuilder.Make(go, owRigidBody, sphereOfInfluence * 2f); ao._rootSector = sector; diff --git a/NewHorizons/Handlers/PlanetDestructionHandler.cs b/NewHorizons/Handlers/PlanetDestructionHandler.cs index ec9d1674..bf683b91 100644 --- a/NewHorizons/Handlers/PlanetDestructionHandler.cs +++ b/NewHorizons/Handlers/PlanetDestructionHandler.cs @@ -78,6 +78,12 @@ namespace NewHorizons.Handlers gameObject.SetActive(false); } GameObject.FindObjectOfType().gameObject.SetActive(false); + + // force call update here to make it switch to an active star. idk why we didnt have to do this before + SunLightEffectsController.Instance.Update(); + + // Since we didn't call RemoveBody on the Stranger have to call this here + StrangerRemoved(); }, 2); // Have to wait or shit goes wild foreach (var streamingAssetBundle in StreamingManager.s_activeBundles) @@ -96,14 +102,23 @@ namespace NewHorizons.Handlers } } + public static void StrangerRemoved() + { + CloakHandler.FlagStrangerDisabled = true; + + if (Locator._cloakFieldController?.GetComponentInParent()?.GetAstroObjectName() == AstroObject.Name.RingWorld) + { + Locator._cloakFieldController = null; + } + } + public static void RemoveBody(AstroObject ao, bool delete = false, List toDestroy = null) { NHLogger.LogVerbose($"Removing [{ao.name}]"); if (ao.GetAstroObjectName() == AstroObject.Name.RingWorld) { - CloakHandler.FlagStrangerDisabled = true; - if (Locator._cloakFieldController?.GetComponentInParent() == ao) Locator._cloakFieldController = null; + StrangerRemoved(); } if (ao.gameObject == null || !ao.gameObject.activeInHierarchy)