From c02ca9da2b94d5d865ff97b038154210bc292ed4 Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Sat, 31 Dec 2022 21:42:46 +0000 Subject: [PATCH] Fix most OWRigidobjects not following a planet when it's moved. --- NewHorizons/Handlers/PlanetCreationHandler.cs | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 93e55b81..93a37f56 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -793,8 +793,34 @@ namespace NewHorizons.Handlers public static void SetPositionFromVector(GameObject go, Vector3 position) { - go.transform.parent = Locator.GetRootTransform(); - go.transform.position = position; + if (go.GetAttachedOWRigidbody() != null) + { + var rb = go.GetAttachedOWRigidbody(); + var allChildren = CenterOfTheUniverse.s_rigidbodies.Where(x => x.GetOrigParentBody() == rb).ToArray(); + + var localPositions = allChildren.Select(x => rb.transform.InverseTransformPoint(x.transform.position)).ToArray(); + + go.transform.parent = Locator.GetRootTransform(); + go.transform.position = position; + + for (var i = 0; i < allChildren.Count(); i++) + { + if (allChildren[i].GetComponent() != null) + { + var orb = allChildren[i].GetComponent(); + orb.SetOrbPosition(go.transform.TransformPoint(localPositions[i])); + } + else + { + allChildren[i].transform.position = go.transform.TransformPoint(localPositions[i]); + } + } + } + else + { + go.transform.parent = Locator.GetRootTransform(); + go.transform.position = position; + } if (go.transform.position.magnitude > Main.FurthestOrbit) {