Revert "Revert "Disable starlights when out of range" (#385)"

This reverts commit a1b1bd9a4052a0ad212cf3570d79c6d37e197d08, reversing
changes made to acb235d4788ed6d993a6b23f918e2ae94cce0493.
This commit is contained in:
Nick 2022-09-15 00:25:07 -04:00
parent a1b1bd9a40
commit 6d2dbf72d5
5 changed files with 39 additions and 3 deletions

View File

@ -126,7 +126,6 @@ namespace NewHorizons.Builder.Body
light.CopyPropertiesFrom(SearchUtilities.Find("Sun_Body/Sector_SUN/Effects_SUN/SunLight").GetComponent<Light>());
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();

View File

@ -287,6 +287,8 @@ namespace NewHorizons.Components.SizeControllers
_stellarRemnant.SetActive(true);
var remnantStarController = _stellarRemnant.GetComponentInChildren<StarController>();
if (remnantStarController != null) StarLightController.AddStar(remnantStarController);
var remnantStarLight = _stellarRemnant.FindChild("SunLight");
if (remnantStarLight != null) StarLightController.AddStarLight(remnantStarLight.GetComponent<Light>());
}
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);
if (!isProxy) StarLightController.RemoveStarLight(gameObject.FindChild("SunLight").GetAddComponent<Light>());
if (_stellarRemnant != null)
{

View File

@ -14,6 +14,7 @@ namespace NewHorizons.Components
public static StarLightController Instance { get; private set; }
private List<StarController> _stars = new List<StarController>();
private List<Light> _lights = new List<Light>();
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)

View File

@ -59,6 +59,7 @@ namespace NewHorizons.Handlers
starLightGO.AddComponent<StarLightController>();
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<Light>());
// 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)
{

View File

@ -118,6 +118,7 @@ namespace NewHorizons.Handlers
case AstroObject.Name.Sun:
var starController = ao.gameObject.GetComponent<StarController>();
StarLightController.RemoveStar(starController);
StarLightController.RemoveStarLight(ao.gameObject.FindChild("Sector_SUN/Effects_SUN/SunLight").GetComponent<Light>());
GameObject.Destroy(starController);
var audio = ao.GetComponentInChildren<SunSurfaceAudioController>();