From 2ad9784b34d2a3ff98383702a3135760da01f266 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 22 Apr 2023 15:51:36 -0400 Subject: [PATCH] Fix primary body stuff --- NewHorizons/Builder/Body/CometTailBuilder.cs | 11 ++++++++++- .../Components/SizeControllers/CometTailController.cs | 10 ++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/NewHorizons/Builder/Body/CometTailBuilder.cs b/NewHorizons/Builder/Body/CometTailBuilder.cs index cdc691f5..53883948 100644 --- a/NewHorizons/Builder/Body/CometTailBuilder.cs +++ b/NewHorizons/Builder/Body/CometTailBuilder.cs @@ -62,6 +62,12 @@ namespace NewHorizons.Builder.Body public static void Make(GameObject planetGO, Sector sector, CometTailModule cometTailModule, PlanetConfig config) { + if (config.Orbit.primaryBody == null) + { + NHLogger.LogError($"Comet {planetGO.name} does not orbit anything. That makes no sense"); + return; + } + var rootObj = new GameObject("CometRoot"); rootObj.SetActive(false); rootObj.transform.parent = sector?.transform ?? planetGO.transform; @@ -77,7 +83,10 @@ namespace NewHorizons.Builder.Body Delay.FireOnNextUpdate(() => { - controller.SetPrimaryBody(AstroObjectLocator.GetAstroObject(cometTailModule.primaryBody).transform); + controller.SetPrimaryBody( + AstroObjectLocator.GetAstroObject(cometTailModule.primaryBody).transform, + AstroObjectLocator.GetAstroObject(config.Orbit.primaryBody).GetAttachedOWRigidbody() + ); }); controller.SetScaleCurve(cometTailModule.curve); diff --git a/NewHorizons/Components/SizeControllers/CometTailController.cs b/NewHorizons/Components/SizeControllers/CometTailController.cs index b108d76e..65b0676b 100644 --- a/NewHorizons/Components/SizeControllers/CometTailController.cs +++ b/NewHorizons/Components/SizeControllers/CometTailController.cs @@ -6,7 +6,8 @@ namespace NewHorizons.Components.SizeControllers { public class CometTailController : SizeController { - private Transform _primaryBody; + private Transform _dustTargetBody; + private OWRigidbody _primaryBody; private OWRigidbody _body; private bool _hasRotationOverride; @@ -38,8 +39,8 @@ namespace NewHorizons.Components.SizeControllers private void UpdateTargetPositions() { - var toPrimary = (_body.transform.position - _primaryBody.transform.position).normalized; - var velocityDirection = -_body.GetVelocity(); // Accept that this is flipped ok + var toPrimary = (_body.transform.position - _dustTargetBody.transform.position).normalized; + var velocityDirection = (_primaryBody?.GetVelocity() ?? Vector3.zero) -_body.GetVelocity(); // Accept that this is flipped ok var tangentVel = Vector3.ProjectOnPlane(velocityDirection, toPrimary) / velocityDirection.magnitude; @@ -53,9 +54,10 @@ namespace NewHorizons.Components.SizeControllers transform.localRotation = Quaternion.Euler(eulerAngles); } - public void SetPrimaryBody(Transform primaryBody) + public void SetPrimaryBody(Transform dustTarget, OWRigidbody primaryBody) { _hasPrimaryBody = true; + _dustTargetBody = dustTarget; _primaryBody = primaryBody; } }