diff --git a/NewHorizons/Builder/Atmosphere/AtmosphereBuilder.cs b/NewHorizons/Builder/Atmosphere/AtmosphereBuilder.cs index 2457c32c..6ec91e61 100644 --- a/NewHorizons/Builder/Atmosphere/AtmosphereBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/AtmosphereBuilder.cs @@ -23,7 +23,7 @@ namespace NewHorizons.Atmosphere meshRenderer.material.SetFloat("_InnerRadius", atmosphereModule.Cloud != null ? atmosphereModule.Size : surfaceSize); meshRenderer.material.SetFloat("_OuterRadius", atmosphereModule.Size * 1.2f); if(atmosphereModule.AtmosphereTint != null) - meshRenderer.material.SetColor("_SkyColor", atmosphereModule.AtmosphereTint.ToColor()); + meshRenderer.material.SetColor("_SkyColor", atmosphereModule.AtmosphereTint.ToColor32()); } atmo.SetActive(true); diff --git a/NewHorizons/Builder/Atmosphere/CloudsBuilder.cs b/NewHorizons/Builder/Atmosphere/CloudsBuilder.cs index 34170e84..0dfcaeb7 100644 --- a/NewHorizons/Builder/Atmosphere/CloudsBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/CloudsBuilder.cs @@ -30,7 +30,7 @@ namespace NewHorizons.Atmosphere return; } - Color cloudTint = atmo.CloudTint == null ? Color.white : (Color)atmo.CloudTint.ToColor(); + Color cloudTint = atmo.CloudTint == null ? Color.white : (Color)atmo.CloudTint.ToColor32(); GameObject cloudsMainGO = new GameObject(); cloudsMainGO.SetActive(false); @@ -90,7 +90,7 @@ namespace NewHorizons.Atmosphere var bottomTSRTempArray = new Material[bottomTSRMaterials.Length]; // It's a bit too green - var bottomColor = atmo.CloudTint.ToColor(); + var bottomColor = atmo.CloudTint.ToColor32(); bottomColor.g = (byte)(bottomColor.g * 0.5f); for (int i = 0; i < bottomTSRMaterials.Length; i++) { diff --git a/NewHorizons/Builder/Atmosphere/FogBuilder.cs b/NewHorizons/Builder/Atmosphere/FogBuilder.cs index 65dc7903..96f8ed37 100644 --- a/NewHorizons/Builder/Atmosphere/FogBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/FogBuilder.cs @@ -38,12 +38,12 @@ namespace NewHorizons.Atmosphere PFC.fogExponent = 1f; PFC.fogColorRampTexture = dbPlanetaryFogController.fogColorRampTexture; PFC.fogColorRampIntensity = 1f; - var adjustedColour = atmo.FogTint.ToColor(); + var adjustedColour = atmo.FogTint.ToColor32(); adjustedColour.r = (byte)(adjustedColour.r * atmo.FogDensity); adjustedColour.g = (byte)(adjustedColour.g * atmo.FogDensity); adjustedColour.b = (byte)(adjustedColour.b * atmo.FogDensity); adjustedColour.a = (byte)(adjustedColour.a * atmo.FogDensity); - PFC.fogTint = atmo.FogTint.ToColor(); + PFC.fogTint = atmo.FogTint.ToColor32(); GameObject lodFogGO = new GameObject("LODFogSphere"); lodFogGO.SetActive(false); @@ -55,7 +55,7 @@ namespace NewHorizons.Atmosphere MeshRenderer lodMR = lodFogGO.AddComponent(); lodMR.material = new Material(brambleLODFog.GetComponent().material); - lodMR.material.color = atmo.FogTint.ToColor(); + lodMR.material.color = atmo.FogTint.ToColor32(); lodMR.material.renderQueue = 1000; /* diff --git a/NewHorizons/Builder/Body/FunnelBuilder.cs b/NewHorizons/Builder/Body/FunnelBuilder.cs index 7ccff241..b896d317 100644 --- a/NewHorizons/Builder/Body/FunnelBuilder.cs +++ b/NewHorizons/Builder/Body/FunnelBuilder.cs @@ -111,7 +111,8 @@ namespace NewHorizons.Builder.Body } else if (funnelType == FunnelType.STAR) { - lavaMaterial.SetFloat("_HeightScale", 1000); + lavaMaterial.renderQueue = 2999; + lavaMaterial.SetFloat("_HeightScale", 100000); AddDestructionVolumes(fluidVolume, DeathType.Energy); } diff --git a/NewHorizons/Builder/Body/ProcGenBuilder.cs b/NewHorizons/Builder/Body/ProcGenBuilder.cs index 94ae60e6..e53e76d7 100644 --- a/NewHorizons/Builder/Body/ProcGenBuilder.cs +++ b/NewHorizons/Builder/Body/ProcGenBuilder.cs @@ -25,7 +25,7 @@ namespace NewHorizons.Builder.Body var cubeSphereMR = icosphere.AddComponent(); cubeSphereMR.material = new Material(Shader.Find("Standard")); - cubeSphereMR.material.color = module.Color.ToColor(); + cubeSphereMR.material.color = module.Color.ToColor32(); var cubeSphereMC = icosphere.AddComponent(); cubeSphereMC.sharedMesh = mesh; diff --git a/NewHorizons/Builder/Body/SandBuilder.cs b/NewHorizons/Builder/Body/SandBuilder.cs index 30a85b8a..5e5874e2 100644 --- a/NewHorizons/Builder/Body/SandBuilder.cs +++ b/NewHorizons/Builder/Body/SandBuilder.cs @@ -29,8 +29,8 @@ namespace NewHorizons.Builder.Body new Material(sandMaterials[1]) }; GameObject.Destroy(oldMR); - sandMR.sharedMaterials[0].color = module.Tint.ToColor(); - sandMR.sharedMaterials[1].color = module.Tint.ToColor(); + sandMR.sharedMaterials[0].color = module.Tint.ToColor32(); + sandMR.sharedMaterials[1].color = module.Tint.ToColor32(); } var collider = GameObject.Instantiate(GameObject.Find("TowerTwin_Body/SandSphere_Draining/Collider"), sandGO.transform); diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index b9d0648f..0f134026 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -70,11 +70,11 @@ namespace NewHorizons.Builder.Body PlanetaryFogController fog = sunAtmosphere.transform.Find("FogSphere").GetComponent(); if (starModule.Tint != null) { - fog.fogTint = starModule.Tint.ToColor(); + fog.fogTint = starModule.Tint.ToColor32(); sunAtmosphere.transform.Find("AtmoSphere").transform.localScale = Vector3.one * (starModule.Size + 1000) / starModule.Size; foreach (var lod in sunAtmosphere.transform.Find("AtmoSphere").GetComponentsInChildren()) { - lod.material.SetColor("_SkyColor", starModule.Tint.ToColor()); + lod.material.SetColor("_SkyColor", starModule.Tint.ToColor32()); lod.material.SetFloat("_InnerRadius", starModule.Size); lod.material.SetFloat("_OuterRadius", starModule.Size * 3f / 2f); } @@ -107,9 +107,9 @@ namespace NewHorizons.Builder.Body if (lightColour == null && starModule.Tint != null) { // Lighten it a bit - var r = Mathf.Clamp01(starModule.Tint.R * 1.5f / 255f); - var g = Mathf.Clamp01(starModule.Tint.G * 1.5f / 255f); - var b = Mathf.Clamp01(starModule.Tint.B * 1.5f / 255f); + var r = Mathf.Clamp01(starModule.Tint.R * 1.5f); + var g = Mathf.Clamp01(starModule.Tint.G * 1.5f); + var b = Mathf.Clamp01(starModule.Tint.B * 1.5f); lightColour = new Color(r, g, b); } if (lightColour != null) light.color = (Color)lightColour; @@ -126,9 +126,13 @@ namespace NewHorizons.Builder.Body var giantMaterial = sun.GetComponent().GetValue("_endSurfaceMaterial"); surface.sharedMaterial = new Material(starModule.Size >= 3000 ? giantMaterial : mainSequenceMaterial); - var mod = Mathf.Max(1f, 8f * starModule.SolarLuminosity) / 255f; - surface.sharedMaterial.color = new Color(colour.r * mod, colour.g * mod, colour.b * mod); - surface.sharedMaterial.SetTexture("_ColorRamp", ImageUtilities.TintImage(_colorOverTime, colour)); + var mod = Mathf.Max(0.5f, 2f * Mathf.Sqrt(starModule.SolarLuminosity)); + var adjustedColour = new Color(colour.r * mod, colour.g * mod, colour.b * mod); + surface.sharedMaterial.color = adjustedColour; + + Color.RGBToHSV(adjustedColour, out float H, out float S, out float V); + var darkenedColor = Color.HSVToRGB(H, S, V * 0.125f); + surface.sharedMaterial.SetTexture("_ColorRamp", ImageUtilities.LerpGreyscaleImage(_colorOverTime, adjustedColour, darkenedColor)); } if(starModule.SolarFlareTint != null) diff --git a/NewHorizons/Builder/Body/WaterBuilder.cs b/NewHorizons/Builder/Body/WaterBuilder.cs index cd2ba69c..ee80e00a 100644 --- a/NewHorizons/Builder/Body/WaterBuilder.cs +++ b/NewHorizons/Builder/Body/WaterBuilder.cs @@ -18,7 +18,6 @@ namespace NewHorizons.Builder.Body waterGO.layer = 15; waterGO.transform.parent = body.transform; waterGO.transform.localScale = new Vector3(waterSize, waterSize, waterSize); - waterGO.DestroyAllComponents(); var GDTSR = GameObject.Find("Ocean_GD").GetComponent(); @@ -38,7 +37,7 @@ namespace NewHorizons.Builder.Body tempArray[i] = new Material(GDSharedMaterials[i]); if (module.Tint != null) { - tempArray[i].color = module.Tint.ToColor(); + tempArray[i].color = module.Tint.ToColor32(); } } diff --git a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs index dfee8b05..aeaff924 100644 --- a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs +++ b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs @@ -35,13 +35,13 @@ namespace NewHorizons.Builder.Orbital orbitLine = orbitGO.AddComponent(); var color = Color.white; - if (config.Orbit.Tint != null) color = config.Orbit.Tint.ToColor(); - else if (config.Star != null) color = config.Star.Tint.ToColor(); - else if (config.Atmosphere != null && config.Atmosphere.CloudTint != null) color = config.Atmosphere.CloudTint.ToColor(); + if (config.Orbit.Tint != null) color = config.Orbit.Tint.ToColor32(); + else if (config.Star != null) color = config.Star.Tint.ToColor32(); + else if (config.Atmosphere != null && config.Atmosphere.CloudTint != null) color = config.Atmosphere.CloudTint.ToColor32(); else if (config.Base.BlackHoleSize != 0 || config.Singularity != null) color = new Color(1f, 0.5f, 1f); else if (config.Base.WaterSize != 0) color = new Color(0.5f, 0.5f, 1f); else if (config.Base.LavaSize != 0) color = new Color(1f, 0.5f, 0.5f); - else if (config.Atmosphere != null && config.Atmosphere.FogTint != null) color = config.Atmosphere.FogTint.ToColor(); + else if (config.Atmosphere != null && config.Atmosphere.FogTint != null) color = config.Atmosphere.FogTint.ToColor32(); var fade = isMoon; if (config.Base.IsSatellite) diff --git a/NewHorizons/Utility/ImageUtilities.cs b/NewHorizons/Utility/ImageUtilities.cs index 6264a1b3..7877e218 100644 --- a/NewHorizons/Utility/ImageUtilities.cs +++ b/NewHorizons/Utility/ImageUtilities.cs @@ -21,6 +21,22 @@ namespace NewHorizons.Utility return newImage; } + public static Texture2D LerpGreyscaleImage(Texture2D image, Color lightTint, Color darkTint) + { + var pixels = image.GetPixels(); + for (int i = 0; i < pixels.Length; i++) + { + pixels[i].r = Mathf.Lerp(darkTint.r, lightTint.r, pixels[i].r); + pixels[i].g = Mathf.Lerp(darkTint.g, lightTint.g, pixels[i].g); + pixels[i].b = Mathf.Lerp(darkTint.b, lightTint.b, pixels[i].b); + } + + var newImage = new Texture2D(image.width, image.height); + newImage.SetPixels(pixels); + newImage.Apply(); + return newImage; + } + public static Texture2D LoadImage(string filepath) { Texture2D tex = new Texture2D(2, 2); diff --git a/NewHorizons/Utility/MColor.cs b/NewHorizons/Utility/MColor.cs index 99885ab4..228ac25a 100644 --- a/NewHorizons/Utility/MColor.cs +++ b/NewHorizons/Utility/MColor.cs @@ -17,6 +17,8 @@ namespace NewHorizons.Utility public int B { get; } public int A { get; } - public Color ToColor() => new Color(R / 255, G / 255, B / 255, A / 255); + public Color32 ToColor32() => new Color(R, G, B, A); + + public Color ToColor() => new Color(R / 255f, G / 255f, B / 255f, A / 255f); } }