From 44fa349d8c3ffd34daf5e61bfc25642ebd5f39d9 Mon Sep 17 00:00:00 2001 From: Nick Date: Thu, 30 Jun 2022 23:22:12 -0400 Subject: [PATCH] Add color ramp to stars --- NewHorizons/Builder/Body/ProxyBuilder.cs | 2 +- NewHorizons/Builder/Body/StarBuilder.cs | 31 +++++++++++++------ .../Modules/VariableSize/StarModule.cs | 5 +++ NewHorizons/Handlers/PlanetCreationHandler.cs | 2 +- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/NewHorizons/Builder/Body/ProxyBuilder.cs b/NewHorizons/Builder/Body/ProxyBuilder.cs index 5bbe0ae0..817f57cf 100644 --- a/NewHorizons/Builder/Body/ProxyBuilder.cs +++ b/NewHorizons/Builder/Body/ProxyBuilder.cs @@ -62,7 +62,7 @@ namespace NewHorizons.Builder.Body } if (body.Config.Star != null) { - var starGO = StarBuilder.MakeStarProxy(planetGO, newProxy, body.Config.Star); + var starGO = StarBuilder.MakeStarProxy(planetGO, newProxy, body.Config.Star, body.Mod); if (realSize < body.Config.Star.size) realSize = body.Config.Star.size; } diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index ec728ead..05fcaa35 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -5,6 +5,8 @@ using OWML.Utils; using UnityEngine; using NewHorizons.External.Modules.VariableSize; using Logger = NewHorizons.Utility.Logger; +using OWML.ModHelper; +using OWML.Common; namespace NewHorizons.Builder.Body { @@ -19,9 +21,9 @@ namespace NewHorizons.Builder.Body private static readonly int InnerRadius = Shader.PropertyToID("_InnerRadius"); private static readonly int OuterRadius = Shader.PropertyToID("_OuterRadius"); - public static StarController Make(GameObject planetGO, Sector sector, StarModule starModule) + public static StarController Make(GameObject planetGO, Sector sector, StarModule starModule, IModBehaviour mod) { - var starGO = MakeStarGraphics(planetGO, sector, starModule); + var starGO = MakeStarGraphics(planetGO, sector, starModule, mod); var sunAudio = Object.Instantiate(SearchUtilities.Find("Sun_Body/Sector_SUN/Audio_SUN"), starGO.transform); sunAudio.transform.localPosition = Vector3.zero; @@ -152,9 +154,9 @@ namespace NewHorizons.Builder.Body return starController; } - public static GameObject MakeStarProxy(GameObject planet, GameObject proxyGO, StarModule starModule) + public static GameObject MakeStarProxy(GameObject planet, GameObject proxyGO, StarModule starModule, IModBehaviour mod) { - var starGO = MakeStarGraphics(proxyGO, null, starModule); + var starGO = MakeStarGraphics(proxyGO, null, starModule, mod); var supernova = MakeSupernova(starGO, starModule); @@ -175,7 +177,7 @@ namespace NewHorizons.Builder.Body return proxyGO; } - public static GameObject MakeStarGraphics(GameObject rootObject, Sector sector, StarModule starModule) + public static GameObject MakeStarGraphics(GameObject rootObject, Sector sector, StarModule starModule, IModBehaviour mod) { if (_colorOverTime == null) _colorOverTime = ImageUtilities.GetTexture(Main.Instance, "Assets/textures/StarColorOverTime.png"); @@ -208,10 +210,10 @@ namespace NewHorizons.Builder.Body starGO.transform.position = rootObject.transform.position; starGO.transform.localScale = starModule.size * Vector3.one; + TessellatedSphereRenderer surface = sunSurface.GetComponent(); + if (starModule.tint != null) { - TessellatedSphereRenderer surface = sunSurface.GetComponent(); - var colour = starModule.tint.ToColor(); var sun = SearchUtilities.Find("Sun_Body"); @@ -219,8 +221,8 @@ namespace NewHorizons.Builder.Body var giantMaterial = sun.GetComponent()._endSurfaceMaterial; surface.sharedMaterial = new Material(starModule.size >= 3000 ? giantMaterial : mainSequenceMaterial); - var mod = Mathf.Max(1f, 2f * Mathf.Sqrt(starModule.solarLuminosity)); - var adjustedColour = new Color(colour.r * mod, colour.g * mod, colour.b * mod); + var modifier = Mathf.Max(1f, 2f * Mathf.Sqrt(starModule.solarLuminosity)); + var adjustedColour = new Color(colour.r * modifier, colour.g * modifier, colour.b * modifier); surface.sharedMaterial.color = adjustedColour; Color.RGBToHSV(adjustedColour, out var h, out var s, out var v); @@ -229,12 +231,21 @@ namespace NewHorizons.Builder.Body if (starModule.endTint != null) { var endColour = starModule.endTint.ToColor(); - darkenedColor = new Color(endColour.r * mod, endColour.g * mod, endColour.b * mod); + darkenedColor = new Color(endColour.r * modifier, endColour.g * modifier, endColour.b * modifier); } surface.sharedMaterial.SetTexture(ColorRamp, ImageUtilities.LerpGreyscaleImage(_colorOverTime, adjustedColour, darkenedColor)); } + if (!string.IsNullOrEmpty(starModule.starRampTexture)) + { + var ramp = ImageUtilities.GetTexture(mod, starModule.starRampTexture); + if (ramp != null) + { + surface.sharedMaterial.SetTexture(ColorRamp, ramp); + } + } + return starGO; } diff --git a/NewHorizons/External/Modules/VariableSize/StarModule.cs b/NewHorizons/External/Modules/VariableSize/StarModule.cs index 201571e3..164d2575 100644 --- a/NewHorizons/External/Modules/VariableSize/StarModule.cs +++ b/NewHorizons/External/Modules/VariableSize/StarModule.cs @@ -56,6 +56,11 @@ namespace NewHorizons.External.Modules.VariableSize /// public MColor tint; + /// + /// Path to the texture to put as the star ramp. Optional. + /// + public string starRampTexture; + /// /// How far the light from the star can reach. /// diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 55d7db88..888342e1 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -399,7 +399,7 @@ namespace NewHorizons.Handlers if (body.Config.Star != null) { - StarLightController.AddStar(StarBuilder.Make(go, sector, body.Config.Star)); + StarLightController.AddStar(StarBuilder.Make(go, sector, body.Config.Star, body.Mod)); } if (body.Config.Ring != null)