diff --git a/NewHorizons/Builder/Body/HeightMapBuilder.cs b/NewHorizons/Builder/Body/HeightMapBuilder.cs index 2c09240e..6c505c04 100644 --- a/NewHorizons/Builder/Body/HeightMapBuilder.cs +++ b/NewHorizons/Builder/Body/HeightMapBuilder.cs @@ -70,6 +70,9 @@ namespace NewHorizons.Builder.Body var cubeSphereMC = cubeSphere.AddComponent(); cubeSphereMC.sharedMesh = mesh; + var cubeSphereSC = cubeSphere.AddComponent(); + cubeSphereSC.radius = Mathf.Min(module.minHeight, module.maxHeight); + var superGroup = planetGO.GetComponent(); if (superGroup != null) cubeSphere.AddComponent()._superGroup = superGroup; diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index 1d917a7c..8d225548 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -33,7 +33,6 @@ namespace NewHorizons.Builder.Body var surfaceAudio = sunSurfaceAudio.gameObject.AddComponent(); GameObject.Destroy(sunSurfaceAudio); surfaceAudio.SetSector(sector); - surfaceAudio.SetSurfaceRadius(starModule.size); sunAudio.name = "Audio_Star"; @@ -141,6 +140,7 @@ namespace NewHorizons.Builder.Body controller.StartColour = starModule.tint; controller.EndColour = starModule.endTint; controller.WillExplode = starModule.goSupernova; + surfaceAudio.SetStarEvolutionController(controller); starGO.SetActive(true); // It fucking insists on this existing and its really annoying diff --git a/NewHorizons/Builder/Props/PropBuildManager.cs b/NewHorizons/Builder/Props/PropBuildManager.cs index f4b8cf34..7aef39af 100644 --- a/NewHorizons/Builder/Props/PropBuildManager.cs +++ b/NewHorizons/Builder/Props/PropBuildManager.cs @@ -195,8 +195,15 @@ namespace NewHorizons.Builder.Props if (config.Props.singularities != null) { foreach (var singularity in config.Props.singularities) - { - SingularityBuilder.Make(go, sector, go.GetComponent(), config, singularity); + { + try + { + SingularityBuilder.Make(go, sector, go.GetComponent(), config, singularity); + } + catch (Exception ex) + { + Logger.LogError($"Couldn't make singularity \"{(string.IsNullOrEmpty(singularity.uniqueID) ? config.name : singularity.uniqueID)}\" for [{go.name}] : {ex.Message}, {ex.StackTrace}"); + } } } if (config.Props.audioVolumes != null) diff --git a/NewHorizons/Components/StarSurfaceAudioController.cs b/NewHorizons/Components/StarSurfaceAudioController.cs index e3e8c58e..e5833e4b 100644 --- a/NewHorizons/Components/StarSurfaceAudioController.cs +++ b/NewHorizons/Components/StarSurfaceAudioController.cs @@ -1,4 +1,5 @@ using UnityEngine; +using NewHorizons.Components.SizeControllers; namespace NewHorizons.Components { @@ -6,7 +7,7 @@ namespace NewHorizons.Components public class StarSurfaceAudioController : SectoredMonoBehaviour { [SerializeField] - private float _surfaceRadius; + private StarEvolutionController _starEvolutionController; private OWAudioSource _audioSource; private float _fade; @@ -32,12 +33,11 @@ namespace NewHorizons.Components public void Update() { _fade = Mathf.MoveTowards(_fade, 1, Time.deltaTime * 0.2f); - float value = Mathf.Max(0.0f, Vector3.Distance(Locator.GetPlayerCamera().transform.position, this.transform.position) - _surfaceRadius); + float value = Mathf.Max(0.0f, Vector3.Distance(Locator.GetPlayerCamera().transform.position, this.transform.position) - _starEvolutionController.CurrentScale); float num = Mathf.InverseLerp(1600f, 100f, value); _audioSource.SetLocalVolume(num * num * _fade); } - public float GetSurfaceRadius() => _surfaceRadius; - public float SetSurfaceRadius(float radius) => _surfaceRadius = radius; + public void SetStarEvolutionController(StarEvolutionController controller) => _starEvolutionController = controller; } } \ No newline at end of file diff --git a/NewHorizons/External/Modules/AsteroidBeltModule.cs b/NewHorizons/External/Modules/AsteroidBeltModule.cs index 5a145562..29588801 100644 --- a/NewHorizons/External/Modules/AsteroidBeltModule.cs +++ b/NewHorizons/External/Modules/AsteroidBeltModule.cs @@ -10,7 +10,7 @@ namespace NewHorizons.External.Modules /// /// Amount of asteroids to create. /// - [Range(0, 200)] [DefaultValue(-1)] public int amount = -1; + [Range(-1, 200)] [DefaultValue(-1)] public int amount = -1; /// /// Angle between the rings and the equatorial plane of the planet. diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 9f59f66f..ac080add 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -243,6 +243,9 @@ namespace NewHorizons.Handlers var ao = planetObject.GetComponent(); + var solarSystemRoot = SearchUtilities.Find("SolarSystemRoot").transform; + planetObject.GetComponent()._origParent = ao.IsDimension ? solarSystemRoot.Find("Dimensions") : solarSystemRoot; + if (!ao.IsDimension) _dict.Add(ao, body); else _dimensions.Add(ao, body); } diff --git a/NewHorizons/Handlers/PlanetDestructionHandler.cs b/NewHorizons/Handlers/PlanetDestructionHandler.cs index 33ffbb39..73ed138b 100644 --- a/NewHorizons/Handlers/PlanetDestructionHandler.cs +++ b/NewHorizons/Handlers/PlanetDestructionHandler.cs @@ -3,6 +3,7 @@ using NewHorizons.Utility; using OWML.Utils; using System; using System.Collections.Generic; +using System.Linq; using UnityEngine; using Logger = NewHorizons.Utility.Logger; namespace NewHorizons.Handlers @@ -30,12 +31,26 @@ namespace NewHorizons.Handlers "White Hole" }; + private static readonly string[] _suspendBlacklist = new string[] + { + "Player_Body", + "Ship_Body" + }; + public static void RemoveSolarSystem() { // Stop the sun from killing the player var sunVolumes = SearchUtilities.Find("Sun_Body/Sector_SUN/Volumes_SUN"); sunVolumes.SetActive(false); + foreach (var ow in GameObject.FindObjectsOfType()) + { + if (ow._origParent != null && (ow._origParentBody != null || ow._simulateInSector != null) && ow.transform.GetComponent() == null && !ow._suspended && !_suspendBlacklist.Contains(ow.gameObject.name)) + { + ow.Suspend(); + } + } + foreach (var name in _solarSystemBodies) { var ao = AstroObjectLocator.GetAstroObject(name);