From bd4a118ee8bcff655bcd24f5338ed136ead0e119 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 21 Mar 2022 19:24:32 -0400 Subject: [PATCH] Planets now get destroyed in stars --- NewHorizons/Builder/Body/FunnelBuilder.cs | 2 ++ NewHorizons/Builder/Body/StarBuilder.cs | 2 ++ .../Builder/General/DetectorBuilder.cs | 20 ++++++++++++++----- NewHorizons/Builder/Props/RaftBuilder.cs | 6 +++--- NewHorizons/Components/FunnelController.cs | 9 +++++++++ .../Components/MapSatelliteOrbitFix.cs | 7 ++++++- .../Components/Orbital/BinaryFocalPoint.cs | 20 +++++++++++++++++++ NewHorizons/Handlers/PlanetCreationHandler.cs | 2 +- 8 files changed, 58 insertions(+), 10 deletions(-) diff --git a/NewHorizons/Builder/Body/FunnelBuilder.cs b/NewHorizons/Builder/Body/FunnelBuilder.cs index 183a6a29..840c9f38 100644 --- a/NewHorizons/Builder/Body/FunnelBuilder.cs +++ b/NewHorizons/Builder/Body/FunnelBuilder.cs @@ -211,6 +211,8 @@ namespace NewHorizons.Builder.Body var destructionVolume = child.gameObject.AddComponent(); destructionVolume._deathType = deathType; + // Only stars should destroy planets + destructionVolume._onlyAffectsPlayerAndShip = deathType != DeathType.Energy; } } } diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index 5177a8d9..81225273 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -108,6 +108,8 @@ namespace NewHorizons.Builder.Body deathVolume.transform.localPosition = Vector3.zero; deathVolume.transform.localScale = Vector3.one; deathVolume.GetComponent().radius = 1f; + deathVolume.GetComponent()._onlyAffectsPlayerAndShip = false; + deathVolume.GetComponent()._shrinkBodies = false; deathVolume.name = "DestructionVolume"; TessellatedSphereRenderer surface = sunSurface.GetComponent(); diff --git a/NewHorizons/Builder/General/DetectorBuilder.cs b/NewHorizons/Builder/General/DetectorBuilder.cs index 96568a46..54cd63cd 100644 --- a/NewHorizons/Builder/General/DetectorBuilder.cs +++ b/NewHorizons/Builder/General/DetectorBuilder.cs @@ -8,28 +8,38 @@ using System.Reflection; using UnityEngine; using NewHorizons.Utility; using Logger = NewHorizons.Utility.Logger; +using NewHorizons.External.Configs; namespace NewHorizons.Builder.General { static class DetectorBuilder { - public static GameObject Make(GameObject body, OWRigidbody OWRB, AstroObject primaryBody, AstroObject astroObject, bool inherit, bool destroyedBySun) + public static GameObject Make(GameObject body, OWRigidbody OWRB, AstroObject primaryBody, AstroObject astroObject, IPlanetConfig config) { GameObject detectorGO = new GameObject("FieldDetector"); detectorGO.SetActive(false); detectorGO.transform.parent = body.transform; detectorGO.transform.localPosition = Vector3.zero; - detectorGO.layer = 20; + detectorGO.layer = LayerMask.NameToLayer("BasicDetector"); ConstantForceDetector forceDetector = detectorGO.AddComponent(); - forceDetector.SetValue("_inheritElement0", inherit); + forceDetector.SetValue("_inheritElement0", true); OWRB.RegisterAttachedForceDetector(forceDetector); // For falling into sun - if(destroyedBySun) + if(!config.Base.InvulnerableToSun && config.Star == null && config.FocalPoint == null) { + detectorGO.layer = LayerMask.NameToLayer("AdvancedDetector"); + var fluidDetector = detectorGO.AddComponent(); - // Could copy the splash from the interloper + var sphereCollider = detectorGO.AddComponent(); + sphereCollider.radius = config.Base.SurfaceSize; + + var owCollider = detectorGO.AddComponent(); + + fluidDetector._collider = sphereCollider; + + // Could copy the splash from the interloper as well some day } GravityVolume parentGravityVolume = primaryBody?.GetAttachedOWRigidbody()?.GetAttachedGravityVolume(); diff --git a/NewHorizons/Builder/Props/RaftBuilder.cs b/NewHorizons/Builder/Props/RaftBuilder.cs index b033f902..723dceef 100644 --- a/NewHorizons/Builder/Props/RaftBuilder.cs +++ b/NewHorizons/Builder/Props/RaftBuilder.cs @@ -80,9 +80,9 @@ namespace NewHorizons.Builder.Props StreamingManager.LoadStreamingAssets(child.assetBundle); } - var detectorGO = DetectorBuilder.Make(raftObject, owRigidBody, ao, null, false, false); - var fluidDetector = detectorGO.AddComponent(); - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => fluidDetector._activeVolumes = new EffectVolume[] { body.GetComponentInChildren() }.ToList()); + //var detectorGO = DetectorBuilder.Make(raftObject, owRigidBody, ao, null, false, false); + //var fluidDetector = detectorGO.AddComponent(); + //Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => fluidDetector._activeVolumes = new EffectVolume[] { body.GetComponentInChildren() }.ToList()); var targetBodyAlignment = raftObject.AddComponent(); diff --git a/NewHorizons/Components/FunnelController.cs b/NewHorizons/Components/FunnelController.cs index f813a928..1c6eba58 100644 --- a/NewHorizons/Components/FunnelController.cs +++ b/NewHorizons/Components/FunnelController.cs @@ -23,5 +23,14 @@ namespace NewHorizons.Components var dist = (transform.position - target.position).magnitude; transform.localScale = new Vector3(num, dist/500f, num); } + + private void Update() + { + // The target or anchor could have been destroyed by a star + if(!target.gameObject.activeInHierarchy || !anchor.gameObject.activeInHierarchy) + { + gameObject.SetActive(false); + } + } } } diff --git a/NewHorizons/Components/MapSatelliteOrbitFix.cs b/NewHorizons/Components/MapSatelliteOrbitFix.cs index e348c1df..fdb0ef59 100644 --- a/NewHorizons/Components/MapSatelliteOrbitFix.cs +++ b/NewHorizons/Components/MapSatelliteOrbitFix.cs @@ -1,4 +1,5 @@ using NewHorizons.Builder.General; +using NewHorizons.External.Configs; using System; using System.Collections.Generic; using System.Linq; @@ -12,9 +13,13 @@ namespace NewHorizons.Components { public void Awake() { + // TODO: eventually all bodies should have configs + var config = new PlanetConfig(null); + config.Base.SurfaceSize = 10f; + var detector = base.transform.GetComponentInChildren(); var ao = base.GetComponent(); - var newDetector = DetectorBuilder.Make(base.gameObject, ao.GetAttachedOWRigidbody(), ao.GetPrimaryBody(), ao, true, false); + var newDetector = DetectorBuilder.Make(base.gameObject, ao.GetAttachedOWRigidbody(), ao.GetPrimaryBody(), ao, config); newDetector.transform.parent = detector.transform.parent; GameObject.Destroy(detector); } diff --git a/NewHorizons/Components/Orbital/BinaryFocalPoint.cs b/NewHorizons/Components/Orbital/BinaryFocalPoint.cs index 89940e5d..295551bd 100644 --- a/NewHorizons/Components/Orbital/BinaryFocalPoint.cs +++ b/NewHorizons/Components/Orbital/BinaryFocalPoint.cs @@ -23,5 +23,25 @@ namespace NewHorizons.Components.Orbital { FakeMassBody.SetActive(true); } + + void Update() + { + // Secondary and primary must have been engulfed by a star + if(!Primary.isActiveAndEnabled && !Secondary.isActiveAndEnabled) + { + ReferenceFrameTracker component = Locator.GetPlayerBody().GetComponent(); + if (component.GetReferenceFrame(true) != null && component.GetReferenceFrame(true).GetOWRigidBody() == gameObject) + { + component.UntargetReferenceFrame(); + } + MapMarker component2 = gameObject.GetComponent(); + if (component2 != null) + { + component2.DisableMarker(); + } + gameObject.SetActive(false); + FakeMassBody.SetActive(false); + } + } } } diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 4b9fc4ff..9fb2d0ea 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -274,7 +274,7 @@ namespace NewHorizons.Handlers if (body.Config.Orbit.ShowOrbitLine && !body.Config.Orbit.IsStatic) OrbitlineBuilder.Make(body.Object, ao, body.Config.Orbit.IsMoon, body.Config); - if (!body.Config.Orbit.IsStatic) DetectorBuilder.Make(go, owRigidBody, primaryBody, ao, true, (body.Config.Star == null && !body.Config.Base.InvulnerableToSun)); + if (!body.Config.Orbit.IsStatic) DetectorBuilder.Make(go, owRigidBody, primaryBody, ao, body.Config); if (ao.GetAstroObjectName() == AstroObject.Name.CustomString) AstroObjectLocator.RegisterCustomAstroObject(ao);