From 6a790273fe5cc371572f53e3a7ac02829440b84e Mon Sep 17 00:00:00 2001 From: Noah Pilarski Date: Mon, 8 Aug 2022 18:56:21 -0400 Subject: [PATCH] Add star lifespan --- NewHorizons/Builder/Body/StarBuilder.cs | 1 + .../StarEvolutionController.cs | 23 ++++++++++++------- .../Modules/VariableSize/StarModule.cs | 8 ++++++- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index d3c2812c..d6a6c044 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -141,6 +141,7 @@ namespace NewHorizons.Builder.Body controller.StartColour = starModule.tint; controller.EndColour = starModule.endTint; controller.WillExplode = starModule.goSupernova; + controller.lifespan = starModule.lifespan; controller.normalRamp = !string.IsNullOrEmpty(starModule.starRampTexture) ? ImageUtilities.GetTexture(mod, starModule.starRampTexture) : ramp; if (!string.IsNullOrEmpty(starModule.starCollapseRampTexture)) { diff --git a/NewHorizons/Components/SizeControllers/StarEvolutionController.cs b/NewHorizons/Components/SizeControllers/StarEvolutionController.cs index 1ae2d0d9..19405664 100644 --- a/NewHorizons/Components/SizeControllers/StarEvolutionController.cs +++ b/NewHorizons/Components/SizeControllers/StarEvolutionController.cs @@ -36,7 +36,6 @@ namespace NewHorizons.Components.SizeControllers public float collapseTime = 10f; // seconds public float lifespan = 22f; // minutes - private float _age; private bool _isSupernova; private float _supernovaStartTime; @@ -122,8 +121,6 @@ namespace NewHorizons.Components.SizeControllers _atmosphereRenderers = atmosphere?.transform?.Find("AtmoSphere")?.GetComponentsInChildren(); } - if (WillExplode) GlobalMessenger.AddListener("TriggerSupernova", StartCollapse); - if (scaleCurve != null) { maxScale = scaleCurve.keys.Select(x => x.value).Max() * size; @@ -143,7 +140,6 @@ namespace NewHorizons.Components.SizeControllers public void OnDestroy() { - if (WillExplode) GlobalMessenger.RemoveListener("TriggerSupernova", StartCollapse); } public void SetProxy(StarEvolutionController proxy) @@ -157,8 +153,8 @@ namespace NewHorizons.Components.SizeControllers // Only do colour transition stuff if they set an end colour if (EndColour != null) { - // Use the age if theres no resizing happening, else make it get redder the larger it is or wtv - var t = _age / (lifespan * 60f); + // Use minutes elapsed if theres no resizing happening, else make it get redder the larger it is or wtv + var t = TimeLoop.GetMinutesElapsed() / lifespan; if (maxScale != minScale) t = Mathf.InverseLerp(minScale, maxScale, CurrentScale); if (t < 1f) @@ -218,6 +214,8 @@ namespace NewHorizons.Components.SizeControllers public void StartCollapse() { + if (_isCollapsing) return; + Logger.LogVerbose($"{gameObject.transform.root.name} started collapse"); _isCollapsing = true; @@ -230,6 +228,8 @@ namespace NewHorizons.Components.SizeControllers public void StopCollapse() { + if (!_isCollapsing) return; + Logger.LogVerbose($"{gameObject.transform.root.name} stopped collapse"); _isCollapsing = false; @@ -240,6 +240,8 @@ namespace NewHorizons.Components.SizeControllers public void StartSupernova() { + if (_isSupernova) return; + Logger.LogVerbose($"{gameObject.transform.root.name} started supernova"); SupernovaStart.Invoke(); @@ -248,10 +250,14 @@ namespace NewHorizons.Components.SizeControllers _supernovaStartTime = Time.time; if (atmosphere != null) atmosphere.SetActive(false); if (_destructionVolume != null) _destructionVolume._deathType = DeathType.Supernova; + + if (_proxy != null) _proxy.StartSupernova(); } public void StopSupernova() { + if (!_isSupernova) return; + Logger.LogVerbose($"{gameObject.transform.root.name} stopped supernova"); supernova.enabled = false; @@ -267,12 +273,12 @@ namespace NewHorizons.Components.SizeControllers transform.localScale = Vector3.one; supernova._surface._materials[0] = _surfaceMaterial; supernova._surface.transform.localScale = Vector3.one; + + if (_proxy != null) _proxy.StopSupernova(); } protected new void FixedUpdate() { - _age += Time.deltaTime; - // If we've gone supernova and its been 45 seconds that means it has faded out and is gone // The 45 is from the animation curve used for the supernova alpha if (_isSupernova) @@ -285,6 +291,7 @@ namespace NewHorizons.Components.SizeControllers { base.FixedUpdate(); UpdateMainSequence(); + if (WillExplode && (TimeLoop.GetMinutesElapsed() / lifespan) >= 1) StartCollapse(); } else { diff --git a/NewHorizons/External/Modules/VariableSize/StarModule.cs b/NewHorizons/External/Modules/VariableSize/StarModule.cs index ea303ab0..e09db355 100644 --- a/NewHorizons/External/Modules/VariableSize/StarModule.cs +++ b/NewHorizons/External/Modules/VariableSize/StarModule.cs @@ -17,7 +17,13 @@ namespace NewHorizons.External.Modules.VariableSize /// Should this star explode after 22 minutes? /// [DefaultValue(true)] public bool goSupernova = true; - + + /// + /// How long this star will last until it supernovas. + /// + [DefaultValue(22f)] + public float lifespan = 22f; + /// /// Should we add a star controller to this body? If you want clouds to work on a binary brown dwarf system, set this to false. ///