diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index 7e32c3d3..99a6ee9f 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -126,7 +126,6 @@ namespace NewHorizons.Builder.Body light.CopyPropertiesFrom(SearchUtilities.Find("Sun_Body/Sector_SUN/Effects_SUN/SunLight").GetComponent()); light.intensity *= starModule.solarLuminosity; light.range = starModule.lightRadius; - light.range *= Mathf.Sqrt(starModule.solarLuminosity); Color lightColour = light.color; if (starModule.lightTint != null) lightColour = starModule.lightTint.ToColor(); diff --git a/NewHorizons/Components/SizeControllers/StarEvolutionController.cs b/NewHorizons/Components/SizeControllers/StarEvolutionController.cs index ce904cca..164c2a20 100644 --- a/NewHorizons/Components/SizeControllers/StarEvolutionController.cs +++ b/NewHorizons/Components/SizeControllers/StarEvolutionController.cs @@ -287,6 +287,8 @@ namespace NewHorizons.Components.SizeControllers _stellarRemnant.SetActive(true); var remnantStarController = _stellarRemnant.GetComponentInChildren(); if (remnantStarController != null) StarLightController.AddStar(remnantStarController); + var remnantStarLight = _stellarRemnant.FindChild("SunLight"); + if (remnantStarLight != null) StarLightController.AddStarLight(remnantStarLight.GetComponent()); } if (Time.time > _supernovaStartTime + supernovaTime) @@ -300,6 +302,7 @@ namespace NewHorizons.Components.SizeControllers private void DisableStar(bool start = false) { if (controller != null) StarLightController.RemoveStar(controller); + StarLightController.RemoveStarLight(gameObject.FindChild("SunLight").GetAddComponent()); if (_stellarRemnant != null) { diff --git a/NewHorizons/Components/StarLightController.cs b/NewHorizons/Components/StarLightController.cs index 55a79074..a9e2b000 100644 --- a/NewHorizons/Components/StarLightController.cs +++ b/NewHorizons/Components/StarLightController.cs @@ -14,6 +14,7 @@ namespace NewHorizons.Components public static StarLightController Instance { get; private set; } private List _stars = new List(); + private List _lights = new List(); private StarController _activeStar; private SunLightController _sunLightController; @@ -53,6 +54,20 @@ namespace NewHorizons.Components } } + public static void AddStarLight(Light light) + { + if (light == null) return; + + Instance._lights.Add(light); + } + + public static void RemoveStarLight(Light light) + { + if (light == null) return; + + if (Instance._lights.Contains(light)) Instance._lights.Remove(light); + } + public void Update() { if (_activeStar == null || !_activeStar.gameObject.activeInHierarchy) @@ -78,13 +93,14 @@ namespace NewHorizons.Components material.SetFloat(SunIntensity, intensity); } + // Player is always at 0,0,0 more or less so if they arent using the map camera then wtv + var origin = Vector3.zero; + foreach (var star in _stars) { if (star == null) continue; if (!(star.gameObject.activeSelf && star.gameObject.activeInHierarchy)) continue; - // Player is always at 0,0,0 more or less so if they arent using the map camera then wtv - var origin = Vector3.zero; if (PlayerState.InMapView()) { origin = Locator.GetActiveCamera().transform.position; @@ -96,6 +112,19 @@ namespace NewHorizons.Components break; } } + + if (PlayerState.InMapView()) + { + foreach (var light in _lights) light.enabled = true; + return; + } + + foreach (var light in _lights) + { + // Minimum 50km range so it's not badly noticeable for dim stars + if ((light.transform.position - origin).sqrMagnitude <= Mathf.Max(light.range * light.range, 2500000000)) light.enabled = true; + else light.enabled = false; + } } private void ChangeActiveStar(StarController star) diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 67700c36..84f97aea 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -59,6 +59,7 @@ namespace NewHorizons.Handlers starLightGO.AddComponent(); StarLightController.AddStar(starController); + StarLightController.AddStarLight(starController.Light); starLightGO.SetActive(true); @@ -500,6 +501,9 @@ namespace NewHorizons.Handlers if (starController != null) StarLightController.AddStar(starController); + var starLight = star.FindChild("SunLight"); + if (starLight != null) StarLightController.AddStarLight(starLight.GetComponent()); + // If it has an evolution controller that means it will die -> we make a remnant (unless its a remnant) if (starEvolutionController != null && !body.Config.isStellarRemnant) { diff --git a/NewHorizons/Handlers/PlanetDestructionHandler.cs b/NewHorizons/Handlers/PlanetDestructionHandler.cs index 4d60a271..b92e7972 100644 --- a/NewHorizons/Handlers/PlanetDestructionHandler.cs +++ b/NewHorizons/Handlers/PlanetDestructionHandler.cs @@ -118,6 +118,7 @@ namespace NewHorizons.Handlers case AstroObject.Name.Sun: var starController = ao.gameObject.GetComponent(); StarLightController.RemoveStar(starController); + StarLightController.RemoveStarLight(ao.gameObject.FindChild("SunLight").GetComponent()); GameObject.Destroy(starController); var audio = ao.GetComponentInChildren();