diff --git a/NewHorizons/Builder/Body/FunnelBuilder.cs b/NewHorizons/Builder/Body/FunnelBuilder.cs index b840c727..79261c26 100644 --- a/NewHorizons/Builder/Body/FunnelBuilder.cs +++ b/NewHorizons/Builder/Body/FunnelBuilder.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; +using Logger = NewHorizons.Utility.Logger; namespace NewHorizons.Builder.Body { @@ -19,7 +20,7 @@ namespace NewHorizons.Builder.Body STAR } - public static void Make(GameObject go, ConstantForceDetector detector, FunnelModule module) + public static void Make(GameObject go, ConstantForceDetector detector, InitialMotion initialMotion, FunnelModule module) { var funnelType = FunnelType.SAND; if (module.Type.ToUpper().Equals("WATER")) funnelType = FunnelType.WATER; @@ -28,11 +29,16 @@ namespace NewHorizons.Builder.Body var funnelGO = new GameObject($"{go.name.Replace("_Body", "")}Funnel_Body"); funnelGO.SetActive(false); - + var owrb = funnelGO.AddComponent(); var alignment = funnelGO.AddComponent(); Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => alignment.SetTargetBody(AstroObjectLocator.GetAstroObject(module.Target)?.GetAttachedOWRigidbody())); - funnelGO.AddComponent(); + + var im = funnelGO.AddComponent(); + var velocity = initialMotion.GetInitVelocity(); + im._initLinearDirection = initialMotion._initLinearDirection; + im._initLinearSpeed = initialMotion._initLinearSpeed; + funnelGO.AddComponent(); funnelGO.AddComponent(); funnelGO.AddComponent(); @@ -40,12 +46,13 @@ namespace NewHorizons.Builder.Body var detectorGO = new GameObject("Detector_Funnel"); detectorGO.transform.parent = funnelGO.transform; var funnelDetector = detectorGO.AddComponent(); - funnelDetector._inheritDetector = detector; + funnelDetector._inheritDetector = detector; + funnelDetector._detectableFields = new ForceVolume[0]; detectorGO.AddComponent(); var scaleRoot = new GameObject("ScaleRoot"); - scaleRoot.transform.parent = go.transform; + scaleRoot.transform.parent = funnelGO.transform; var proxyGO = GameObject.Instantiate(GameObject.Find("SandFunnel_Body/ScaleRoot/Proxy_SandFunnel"), scaleRoot.transform); proxyGO.name = "Proxy_Funnel"; @@ -55,7 +62,7 @@ namespace NewHorizons.Builder.Body var volumesGO = GameObject.Instantiate(GameObject.Find("SandFunnel_Body/ScaleRoot/Volumes_SandFunnel"), scaleRoot.transform); volumesGO.name = "Volumes_Funnel"; - var sfv = volumesGO.GetComponent(); + var sfv = volumesGO.GetComponentInChildren(); switch(funnelType) { case FunnelType.SAND: @@ -71,7 +78,9 @@ namespace NewHorizons.Builder.Body sfv._fluidType = FluidVolume.Type.PLASMA; break; } - + + funnelGO.transform.position = go.transform.position; + funnelGO.SetActive(true); } } } diff --git a/NewHorizons/Builder/General/BaseBuilder.cs b/NewHorizons/Builder/General/BaseBuilder.cs index 1947b101..a3680dbb 100644 --- a/NewHorizons/Builder/General/BaseBuilder.cs +++ b/NewHorizons/Builder/General/BaseBuilder.cs @@ -33,6 +33,9 @@ namespace NewHorizons.Builder.General owRigidBody.SetValue("_maintainOriginalCenterOfMass", true); owRigidBody.SetValue("_rigidbody", rigidBody); owRigidBody.SetValue("_kinematicRigidbody", kinematicRigidBody); + owRigidBody._origParent = GameObject.Find("SolarSystemRoot").transform; + owRigidBody.EnableKinematicSimulation(); + owRigidBody.MakeKinematic(); ParameterizedAstroObject astroObject = body.AddComponent(); diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 9c54f061..d761c677 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -497,7 +497,7 @@ namespace NewHorizons if (!body.Config.Orbit.IsStatic) DetectorBuilder.Make(go, owRigidBody, primaryBody, ao); if (body.Config.Funnel != null) - FunnelBuilder.Make(go, go.GetComponentInChildren(), body.Config.Funnel); + FunnelBuilder.Make(go, go.GetComponentInChildren(), initialMotion, body.Config.Funnel); if (ao.GetAstroObjectName() == AstroObject.Name.CustomString) AstroObjectLocator.RegisterCustomAstroObject(ao);