diff --git a/NewHorizons/Components/QuantumPlanet.cs b/NewHorizons/Components/QuantumPlanet.cs index 68763c74..d6b4222e 100644 --- a/NewHorizons/Components/QuantumPlanet.cs +++ b/NewHorizons/Components/QuantumPlanet.cs @@ -1,4 +1,4 @@ -using NewHorizons.Builder.General; +using NewHorizons.Builder.General; using NewHorizons.Builder.Orbital; using NewHorizons.Components.Orbital; using NewHorizons.External.Modules; @@ -21,6 +21,8 @@ namespace NewHorizons.Components private AlignWithTargetBody _alignment; private OWRigidbody _rb; + public int CurrentIndex { get { return _currentIndex; } } + public override void Awake() { base.Awake(); diff --git a/NewHorizons/Patches/DestructionVolumePatches.cs b/NewHorizons/Patches/DestructionVolumePatches.cs new file mode 100644 index 00000000..23221daa --- /dev/null +++ b/NewHorizons/Patches/DestructionVolumePatches.cs @@ -0,0 +1,35 @@ +using HarmonyLib; +using NewHorizons.Components; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NewHorizons.Patches +{ + [HarmonyPatch] + public static class DestructionVolumePatches + { + [HarmonyPrefix] + [HarmonyPatch(typeof(DestructionVolume), nameof(DestructionVolume.Vanish))] + public static bool DestructionVolume_Vanish(OWRigidbody __0) + { + var quantumPlanet = __0.gameObject.GetComponent(); + + if (quantumPlanet == null) return true; + + // Allow it to vanish if this is the only state + if (quantumPlanet.states.Count <= 1) return true; + + // Force it to change states but if it can't, remove it + var oldIndex = quantumPlanet.CurrentIndex; + quantumPlanet.ChangeQuantumState(true); + if (quantumPlanet.CurrentIndex == oldIndex) return true; + + quantumPlanet.states.RemoveAt(oldIndex); + + return false; + } + } +}