From 94441dcc4ba8700b0993d6c8e424dbb1573db485 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 18 Jul 2023 01:48:11 -0400 Subject: [PATCH] Adds solar flare module for scale, life length, time between flares. Implements #368 --- NewHorizons/Builder/Body/StarBuilder.cs | 36 +++++++++++++------ .../Modules/VariableSize/StarModule.cs | 32 +++++++++++++++-- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index 76f0f59a..f4954af5 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -7,6 +7,7 @@ using System.Linq; using NewHorizons.Components.Stars; using NewHorizons.Utility.OuterWilds; using NewHorizons.Utility.Files; +using NewHorizons.Utility.OWML; namespace NewHorizons.Builder.Body { @@ -348,29 +349,42 @@ namespace NewHorizons.Builder.Body solarFlareEmitter.name = "SolarFlareEmitter"; solarFlareEmitter.SetActive(true); + var emitter = solarFlareEmitter.GetComponent(); + + if (starModule.solarFlareSettings != null) + { + emitter._minTimeBetweenFlares = starModule.solarFlareSettings.minTimeBetweenFlares; + emitter._maxTimeBetweenFlares = starModule.solarFlareSettings.maxTimeBetweenFlares; + emitter._lifeLength = starModule.solarFlareSettings.lifeLength; + } + if (starModule.tint != null) { - var flareTint = starModule.tint.ToColor(); - var emitter = solarFlareEmitter.GetComponent(); - emitter.tint = flareTint; + emitter.tint = starModule.tint.ToColor(); + } - var material = new Material(_flareMaterial); - // Since the star isn't awake yet the controllers haven't been made - foreach (var prefab in new GameObject[] { emitter.domePrefab, emitter.loopPrefab, emitter.streamerPrefab }) + var material = new Material(_flareMaterial); + // Since the star isn't awake yet the controllers haven't been made + foreach (var prefab in new GameObject[] { emitter.domePrefab, emitter.loopPrefab, emitter.streamerPrefab }) + { + var controller = prefab.GetComponent(); + // controller._meshRenderer doesn't exist yet since Awake hasn't been called + if (starModule.tint != null) { - var controller = prefab.GetComponent(); - // controller._meshRenderer doesn't exist yet since Awake hasn't been called controller.GetComponent().sharedMaterial = material; controller._color = Color.white; - controller._tint = flareTint; - controller._scaleFactor = Vector3.one * starModule.solarFlareScaleFactor; + controller._tint = starModule.tint.ToColor(); + } + if (starModule.solarFlareSettings != null) + { + controller._scaleFactor = Vector3.one * starModule.solarFlareSettings.scaleFactor; } } starGO.transform.position = rootObject.transform.position; starGO.transform.localScale = starModule.size * Vector3.one; - TessellatedSphereRenderer surface = sunSurface.GetComponent(); + var surface = sunSurface.GetComponent(); if (starModule.tint != null) { diff --git a/NewHorizons/External/Modules/VariableSize/StarModule.cs b/NewHorizons/External/Modules/VariableSize/StarModule.cs index fe35f965..3b833051 100644 --- a/NewHorizons/External/Modules/VariableSize/StarModule.cs +++ b/NewHorizons/External/Modules/VariableSize/StarModule.cs @@ -106,9 +106,37 @@ namespace NewHorizons.External.Modules.VariableSize [DefaultValue("default")] public StellarRemnantType stellarRemnantType = StellarRemnantType.Default; /// - /// Size multiuplier for solar flares. Defaults to 1. + /// Allows overriding solar flare graphical settings. /// - public float solarFlareScaleFactor = 1f; + public SolarFlareModule solarFlareSettings; + + [JsonObject] + public class SolarFlareModule + { + /// + /// Size multiuplier for solar flares. Defaults to 1. + /// + [DefaultValue(1)] + public float scaleFactor = 1f; + + /// + /// How long a solar flare is visible for. Defaults to 15. + /// + [DefaultValue(15f)] + public float lifeLength = 15f; + + /// + /// Solar flares are emitted randomly. This is the minimum ammount of time between solar flares. + /// + [DefaultValue(5f)] + public float minTimeBetweenFlares = 5f; + + /// + /// Solar flares are emitted randomly. This is the maximum ammount of time between solar flares. + /// + [DefaultValue(30f)] + public float maxTimeBetweenFlares = 30f; + } } [JsonConverter(typeof(StringEnumConverter))]