From fae11fc1626622676538722081e96ae4349316fa Mon Sep 17 00:00:00 2001 From: "Nick J. Connors" Date: Tue, 21 Dec 2021 03:57:17 -0500 Subject: [PATCH] Star colours + more map freedom --- NewHorizons/AssetBundle/StarColorOverTime.png | Bin 0 -> 25658 bytes NewHorizons/Body/AsteroidBeltBuilder.cs | 2 +- NewHorizons/Body/StarBuilder.cs | 56 ++++++++++++-- NewHorizons/External/StarModule.cs | 1 + NewHorizons/General/MarkerBuilder.cs | 7 +- NewHorizons/Main.cs | 71 +++++++++++++----- NewHorizons/Utility/ImageUtilities.cs | 1 + NewHorizons/Utility/Patches.cs | 14 ++++ 8 files changed, 122 insertions(+), 30 deletions(-) create mode 100644 NewHorizons/AssetBundle/StarColorOverTime.png diff --git a/NewHorizons/AssetBundle/StarColorOverTime.png b/NewHorizons/AssetBundle/StarColorOverTime.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec046978edc2c9bc6f5d9d5ac4665cd7b7158e8 GIT binary patch literal 25658 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 Hq9pr2hBeso literal 0 HcmV?d00001 diff --git a/NewHorizons/Body/AsteroidBeltBuilder.cs b/NewHorizons/Body/AsteroidBeltBuilder.cs index 3a872b18..29eb7668 100644 --- a/NewHorizons/Body/AsteroidBeltBuilder.cs +++ b/NewHorizons/Body/AsteroidBeltBuilder.cs @@ -60,7 +60,7 @@ namespace NewHorizons.Body Logger.Log($"{config}"); var asteroid = new NewHorizonsBody(new PlanetConfig(config), assets); - Main.AdditionalBodies.Add(asteroid); + Main.NextPassBodies.Add(asteroid); } } } diff --git a/NewHorizons/Body/StarBuilder.cs b/NewHorizons/Body/StarBuilder.cs index dbbae741..d2051d1a 100644 --- a/NewHorizons/Body/StarBuilder.cs +++ b/NewHorizons/Body/StarBuilder.cs @@ -1,17 +1,22 @@ using NewHorizons.External; +using OWML.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; +using Logger = NewHorizons.Utility.Logger; namespace NewHorizons.Body { static class StarBuilder { + private static Texture2D _colorOverTime; public static void Make(GameObject body, Sector sector, StarModule starModule) { + if (_colorOverTime == null) _colorOverTime = Main.Instance.ModHelper.Assets.GetTexture("AssetBundle/StarColorOverTime.png"); + var sunGO = new GameObject("Star"); sunGO.transform.parent = body.transform; @@ -21,33 +26,68 @@ namespace NewHorizons.Body sunSurface.name = "Surface"; var sunLight = GameObject.Instantiate(GameObject.Find("Sun_Body/Sector_SUN/Effects_SUN/SunLight"), sunGO.transform); - sunSurface.transform.localPosition = Vector3.zero; - sunSurface.transform.localScale = Vector3.one; + sunLight.transform.localPosition = Vector3.zero; + sunLight.transform.localScale = Vector3.one; sunLight.name = "StarLight"; var solarFlareEmitter = GameObject.Instantiate(GameObject.Find("Sun_Body/Sector_SUN/Effects_SUN/SolarFlareEmitter"), sunGO.transform); - sunSurface.transform.localPosition = Vector3.zero; - sunSurface.transform.localScale = Vector3.one; + solarFlareEmitter.transform.localPosition = Vector3.zero; + solarFlareEmitter.transform.localScale = Vector3.one; solarFlareEmitter.name = "SolarFlareEmitter"; var sunAudio = GameObject.Instantiate(GameObject.Find("Sun_Body/Sector_SUN/Audio_SUN"), sunGO.transform); - sunSurface.transform.localPosition = Vector3.zero; - sunSurface.transform.localScale = Vector3.one; + sunAudio.transform.localPosition = Vector3.zero; + sunAudio.transform.localScale = Vector3.one; sunAudio.transform.Find("SurfaceAudio_Sun").GetComponent().maxDistance = starModule.Size * 2f; sunAudio.name = "Audio_Star"; var sunAtmosphere = GameObject.Instantiate(GameObject.Find("Sun_Body/Atmosphere_SUN"), sunGO.transform); - sunSurface.transform.localPosition = Vector3.zero; - sunSurface.transform.localScale = Vector3.one * 1.5f; + sunAtmosphere.transform.localPosition = Vector3.zero; + sunAtmosphere.transform.localScale = Vector3.one; sunAtmosphere.name = "Atmosphere_Star"; var ambientLightGO = GameObject.Instantiate(GameObject.Find("Sun_Body/AmbientLight_SUN"), sunGO.transform); ambientLightGO.transform.localPosition = Vector3.zero; ambientLightGO.name = "AmbientLight_Star"; + var heatVolume = GameObject.Instantiate(GameObject.Find("Sun_Body/Sector_SUN/Volumes_SUN/HeatVolume"), sunGO.transform); + heatVolume.transform.localPosition = Vector3.zero; + heatVolume.transform.localScale = Vector3.one; + heatVolume.GetComponent().radius = 1f; + heatVolume.name = "HeatVolume"; + PlanetaryFogController fog = sunAtmosphere.transform.Find("FogSphere").GetComponent(); TessellatedSphereRenderer surface = sunSurface.GetComponent(); Light ambientLight = ambientLightGO.GetComponent(); + SunLightController sunLightController = sunLight.GetComponent(); + GameObject.Destroy(sunLight.GetComponent()); + + if(starModule.Tint != null) + { + var colour = starModule.Tint.ToColor32(); + //sunLightController.sunColor = colour; + //ambientLight.color = colour; + fog.fogTint = colour; + + var sun = GameObject.Find("Sun_Body"); + var mainSequenceMaterial = sun.GetComponent().GetValue("_startSurfaceMaterial"); + var giantMaterial = sun.GetComponent().GetValue("_endSurfaceMaterial"); + + surface.sharedMaterial = new Material(starModule.Size >= 3000 ? giantMaterial : mainSequenceMaterial); + surface.sharedMaterial.color = new Color(colour.r * 4f / 255f, colour.g * 4f / 255f, colour.b * 4f / 255f); + surface.sharedMaterial.SetTexture("_ColorRamp", Utility.ImageUtilities.TintImage(_colorOverTime, colour)); + + sunAtmosphere.transform.Find("AtmoSphere").transform.localScale = Vector3.one * 2f; + foreach (var lod in sunAtmosphere.transform.Find("AtmoSphere").GetComponentsInChildren()) + { + lod.material.SetColor("_SkyColor", colour); + lod.material.SetFloat("_InnerRadius", starModule.Size); + lod.material.SetFloat("_OuterRadius", starModule.Size + 1000); + } + } + + if(starModule.SolarFlareTint != null) + solarFlareEmitter.GetComponent().tint = starModule.SolarFlareTint.ToColor32(); sunGO.transform.localPosition = Vector3.zero; sunGO.transform.localScale = starModule.Size * Vector3.one; diff --git a/NewHorizons/External/StarModule.cs b/NewHorizons/External/StarModule.cs index 23511f17..75c52122 100644 --- a/NewHorizons/External/StarModule.cs +++ b/NewHorizons/External/StarModule.cs @@ -11,5 +11,6 @@ namespace NewHorizons.External { public float Size { get; set; } public MColor32 Tint { get; set; } + public MColor32 SolarFlareTint { get; set; } } } diff --git a/NewHorizons/General/MarkerBuilder.cs b/NewHorizons/General/MarkerBuilder.cs index 8a5dbb00..7c03fe8a 100644 --- a/NewHorizons/General/MarkerBuilder.cs +++ b/NewHorizons/General/MarkerBuilder.cs @@ -8,7 +8,7 @@ namespace NewHorizons.General { static class MarkerBuilder { - public static void Make(GameObject body, string name, bool isMoon) + public static void Make(GameObject body, string name, bool isMoon, bool isStar) { MapMarker MM = body.AddComponent(); MM.SetValue("_labelID", (UITextType)Utility.AddToUITable.Add(name.ToUpper())); @@ -17,7 +17,10 @@ namespace NewHorizons.General { MM.SetValue("_markerType", MM.GetType().GetNestedType("MarkerType", BindingFlags.NonPublic).GetField("Moon").GetValue(MM)); } - else + else if(isStar) + { + MM.SetValue("_markerType", MM.GetType().GetNestedType("MarkerType", BindingFlags.NonPublic).GetField("Sun").GetValue(MM)); + } { MM.SetValue("_markerType", MM.GetType().GetNestedType("MarkerType", BindingFlags.NonPublic).GetField("Planet").GetValue(MM)); } diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index c96b4c6e..0f86dbe6 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -25,7 +25,9 @@ namespace NewHorizons public static Main Instance { get; private set; } public static List BodyList = new List(); - public static List AdditionalBodies = new List(); + public static List NextPassBodies = new List(); + + public static float FurthestOrbit = 50000f; public override object GetApi() { @@ -75,18 +77,35 @@ namespace NewHorizons (b.Config.Orbit.IsMoon ? 2 : 1) )).ToList(); + var flagNoneLoadedThisPass = true; while(BodyList.Count != 0) { foreach (var body in BodyList) { - LoadBody(body); + if (LoadBody(body)) + flagNoneLoadedThisPass = false; } - BodyList = AdditionalBodies; - AdditionalBodies = new List(); + if (flagNoneLoadedThisPass) + { + // Try again but default to sun + foreach(var body in BodyList) + { + if (LoadBody(body, true)) + flagNoneLoadedThisPass = false; + } + if(flagNoneLoadedThisPass) + { + // Give up + Logger.Log($"Couldn't finish adding bodies."); + return; + } + } + BodyList = NextPassBodies; + NextPassBodies = new List(); } } - private void LoadBody(NewHorizonsBody body) + private bool LoadBody(NewHorizonsBody body, bool defaultPrimaryToSun = false) { var stringID = body.Config.Name.ToUpper().Replace(" ", "_").Replace("'", ""); if (stringID.Equals("ATTLEROCK")) stringID = "TIMBER_MOON"; @@ -119,28 +138,31 @@ namespace NewHorizons catch (Exception e) { Logger.LogError($"Couldn't update body {body.Config?.Name}: {e.Message}, {e.StackTrace}"); + return false; } } else { try { - GameObject planetObject; - planetObject = GenerateBody(body); + GameObject planetObject = GenerateBody(body); + if (planetObject == null) return false; planetObject.SetActive(true); } catch (Exception e) { Logger.LogError($"Couldn't generate body {body.Config?.Name}: {e.Message}, {e.StackTrace}"); + return false; } } + return true; } public void LoadConfigs(IModBehaviour mod) { var folder = mod.ModHelper.Manifest.ModFolderPath; - foreach (var file in Directory.GetFiles(folder + @"planets\")) + foreach (var file in Directory.GetFiles(folder + @"planets\", "*.json", SearchOption.AllDirectories)) { try { @@ -168,8 +190,23 @@ namespace NewHorizons return SharedGenerateBody(body, go, sector, rb); } - public static GameObject GenerateBody(NewHorizonsBody body) + public static GameObject GenerateBody(NewHorizonsBody body, bool defaultPrimaryToSun = false) { + AstroObject primaryBody = AstroObjectLocator.GetAstroObject(body.Config.Orbit.PrimaryBody); + if (primaryBody == null) + { + if(defaultPrimaryToSun) + { + Logger.Log($"Couldn't find {body.Config.Orbit.PrimaryBody}, defaulting to Sun"); + primaryBody = AstroObjectLocator.GetAstroObject("Sun"); + } + else + { + NextPassBodies.Add(body); + return null; + } + } + Logger.Log("Begin generation sequence of [" + body.Config.Name + "] ...", Logger.LogType.Log); var go = new GameObject(body.Config.Name.Replace(" ", "").Replace("'", "") + "_Body"); @@ -177,13 +214,6 @@ namespace NewHorizons if(body.Config.Base.GroundSize != 0) GeometryBuilder.Make(go, body.Config.Base.GroundSize); - AstroObject primaryBody = AstroObjectLocator.GetAstroObject(body.Config.Orbit.PrimaryBody); - if(primaryBody == null) - { - Logger.LogError($"Could not find AstroObject {body.Config.Orbit.PrimaryBody}, defaulting to SUN"); - primaryBody = AstroObjectLocator.GetAstroObject(AstroObject.Name.Sun); - } - var atmoSize = body.Config.Atmosphere != null ? body.Config.Atmosphere.Size : 0f; float sphereOfInfluence = Mathf.Max(atmoSize, body.Config.Base.SurfaceSize * 2f); @@ -228,7 +258,7 @@ namespace NewHorizons RFVolumeBuilder.Make(go, rb, sphereOfInfluence); if (body.Config.Base.HasMapMarker) - MarkerBuilder.Make(go, body.Config.Name, body.Config.Orbit.IsMoon); + MarkerBuilder.Make(go, body.Config.Name, body.Config.Orbit.IsMoon, body.Config.Star != null); if (body.Config.Base.HasAmbientLight) AmbientLightBuilder.Make(go, sphereOfInfluence); @@ -246,10 +276,8 @@ namespace NewHorizons if (body.Config.Base.BlackHoleSize != 0) BlackHoleBuilder.Make(go, body.Config.Base, sector); - /* if (body.Config.Star != null) StarBuilder.Make(go, sector, body.Config.Star); - */ // Do stuff that's shared between generating new planets and updating old ones go = SharedGenerateBody(body, go, sector, rb); @@ -264,6 +292,11 @@ namespace NewHorizons go.transform.parent = Locator.GetRootTransform(); go.transform.position = positionVector + primaryBody.transform.position; + if (go.transform.position.magnitude > FurthestOrbit) + { + FurthestOrbit = go.transform.position.magnitude + 30000f; + } + // Have to do this after setting position InitialMotionBuilder.Make(go, primaryBody, rb, body.Config.Orbit); diff --git a/NewHorizons/Utility/ImageUtilities.cs b/NewHorizons/Utility/ImageUtilities.cs index 2a885efe..6264a1b3 100644 --- a/NewHorizons/Utility/ImageUtilities.cs +++ b/NewHorizons/Utility/ImageUtilities.cs @@ -17,6 +17,7 @@ namespace NewHorizons.Utility var newImage = new Texture2D(image.width, image.height); newImage.SetPixels(pixels); + newImage.Apply(); return newImage; } diff --git a/NewHorizons/Utility/Patches.cs b/NewHorizons/Utility/Patches.cs index 32cfcbd9..c6cfda4a 100644 --- a/NewHorizons/Utility/Patches.cs +++ b/NewHorizons/Utility/Patches.cs @@ -15,6 +15,8 @@ namespace NewHorizons.Utility Main.Instance.ModHelper.HarmonyHelper.AddPrefix("GetHUDDisplayName", typeof(Patches), nameof(Patches.GetHUDDisplayName)); Main.Instance.ModHelper.HarmonyHelper.AddPrefix("CheckShipOutsideSolarSystem", typeof(Patches), nameof(Patches.CheckShipOutersideSolarSystem)); Main.Instance.ModHelper.HarmonyHelper.AddPostfix("Start", typeof(Patches), nameof(Patches.OnEllipticOrbitLineStart)); + Main.Instance.ModHelper.HarmonyHelper.AddPostfix("Awake", typeof(Patches), nameof(Patches.OnMapControllerAwake)); + Main.Instance.ModHelper.HarmonyHelper.AddPostfix("Awake", typeof(Patches), nameof(Patches.OnOWCameraAwake)); } public static bool GetHUDDisplayName(ReferenceFrame __instance, ref string __result) @@ -41,5 +43,17 @@ namespace NewHorizons.Utility // For some reason other planets do this idk ____upAxisDir *= -1f; } + + public static void OnMapControllerAwake(MapController __instance, ref float ____maxPanDistance, ref float ____maxZoomDistance, ref float ____minPitchAngle) + { + ____maxPanDistance *= 4f; + ____maxZoomDistance *= 6f; + ____minPitchAngle = -90f; + } + + public static void OnOWCameraAwake(OWCamera __instance) + { + __instance.farClipPlane *= 4f; + } } }