From 1416e07f9b3a43d75481f4c8aaf597cf4489b171 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 12 Aug 2023 15:18:40 -0400 Subject: [PATCH 1/5] Fix flares being white #668 --- NewHorizons/Builder/Body/StarBuilder.cs | 22 +++++++++++++++---- .../Patches/SolarFlareEmitterPatches.cs | 21 ++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 NewHorizons/Patches/SolarFlareEmitterPatches.cs diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index ecbbee5c1..1aba65fdd 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -8,6 +8,7 @@ using NewHorizons.Utility.OuterWilds; using NewHorizons.Utility.Files; using NewHorizons.Utility.OWML; +using UnityEngine.InputSystem.XR; namespace NewHorizons.Builder.Body { @@ -54,6 +55,7 @@ internal static void InitPrefabs() if (_starSurface == null) _starSurface = SearchUtilities.Find("Sun_Body/Sector_SUN/Geometry_SUN/Surface").InstantiateInactive().Rename("Prefab_Surface_Star").DontDestroyOnLoad(); if (_starSolarFlareEmitter == null) _starSolarFlareEmitter = SearchUtilities.Find("Sun_Body/Sector_SUN/Effects_SUN/SolarFlareEmitter").InstantiateInactive().Rename("Prefab_SolarFlareEmitter_Star").DontDestroyOnLoad(); if (_supernovaPrefab == null) _supernovaPrefab = SearchUtilities.Find("Sun_Body/Sector_SUN/Effects_SUN/Supernova").InstantiateInactive().Rename("Prefab_Supernova").DontDestroyOnLoad(); + if (_mainSequenceMaterial == null) _mainSequenceMaterial = new Material(SearchUtilities.Find("Sun_Body").GetComponent()._startSurfaceMaterial).DontDestroyOnLoad(); if (_giantMaterial == null) _giantMaterial = new Material(SearchUtilities.Find("Sun_Body").GetComponent()._endSurfaceMaterial).DontDestroyOnLoad(); if (_flareMaterial == null) @@ -344,7 +346,6 @@ public static GameObject MakeStarGraphics(GameObject rootObject, Sector sector, solarFlareEmitter.transform.localPosition = Vector3.zero; solarFlareEmitter.transform.localScale = Vector3.one; solarFlareEmitter.name = "SolarFlareEmitter"; - solarFlareEmitter.SetActive(true); var emitter = solarFlareEmitter.GetComponent(); @@ -361,10 +362,19 @@ public static GameObject MakeStarGraphics(GameObject rootObject, Sector sector, } 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 }) + + // Make our own copies of all prefabs to make sure we don't actually modify them + // else it will affect any other star using these prefabs + // #668 + emitter._domePrefab = emitter.domePrefab.InstantiateInactive(); + emitter._loopPrefab = emitter.loopPrefab.InstantiateInactive(); + emitter._streamerPrefab = emitter.streamerPrefab.InstantiateInactive(); + + // Get all possible controllers, prefabs or already created ones + foreach (var controller in new GameObject[] { emitter.domePrefab, emitter.loopPrefab, emitter.streamerPrefab } + .Select(x => x.GetComponent()) + .Concat(emitter.GetComponentsInChildren())) { - var controller = prefab.GetComponent(); // controller._meshRenderer doesn't exist yet since Awake hasn't been called if (starModule.tint != null) { @@ -376,6 +386,8 @@ public static GameObject MakeStarGraphics(GameObject rootObject, Sector sector, { controller._scaleFactor = Vector3.one * starModule.solarFlareSettings.scaleFactor; } + controller.gameObject.SetActive(true); + controller.enabled = true; } starGO.transform.position = rootObject.transform.position; @@ -413,6 +425,8 @@ public static GameObject MakeStarGraphics(GameObject rootObject, Sector sector, } } + solarFlareEmitter.SetActive(true); + return starGO; } diff --git a/NewHorizons/Patches/SolarFlareEmitterPatches.cs b/NewHorizons/Patches/SolarFlareEmitterPatches.cs new file mode 100644 index 000000000..5989bcd04 --- /dev/null +++ b/NewHorizons/Patches/SolarFlareEmitterPatches.cs @@ -0,0 +1,21 @@ +using HarmonyLib; +using System.Linq; + +namespace NewHorizons.Patches +{ + [HarmonyPatch(typeof(SolarFlareEmitter))] + public static class SolarFlareEmitterPatches + { + [HarmonyPostfix] + [HarmonyPatch(nameof(SolarFlareEmitter.Awake))] + public static void SolarFlareEmitter_Awake(SolarFlareEmitter __instance) + { + // Because in StarBuilder we use inactive game objects instead of real prefabs these objects all get created inactive + foreach (var flare in __instance._streamers.Concat(__instance._loops).Concat(__instance._domes)) + { + flare.gameObject.SetActive(true); + flare.enabled = true; + } + } + } +} From 9bd1b322700cd95beaabaf387727cdd0094318ca Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 12 Aug 2023 17:09:25 -0400 Subject: [PATCH 2/5] Fixed the rotations of details which used RemoveComponents --- NewHorizons/Builder/Props/DetailBuilder.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NewHorizons/Builder/Props/DetailBuilder.cs b/NewHorizons/Builder/Props/DetailBuilder.cs index 622cdd827..2c878617d 100644 --- a/NewHorizons/Builder/Props/DetailBuilder.cs +++ b/NewHorizons/Builder/Props/DetailBuilder.cs @@ -187,8 +187,9 @@ public static GameObject Make(GameObject go, Sector sector, GameObject prefab, D // Just swap all the children to a new game object var newDetailGO = new GameObject(prop.name); newDetailGO.SetActive(false); - newDetailGO.transform.position = prop.transform.position; newDetailGO.transform.parent = prop.transform.parent; + newDetailGO.transform.position = prop.transform.position; + newDetailGO.transform.rotation = prop.transform.rotation; // Can't modify parents while looping through children bc idk var children = new List(); From 77651a4d26a0c7a8beea04f61bbef6c6a7cc0c74 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 12 Aug 2023 17:11:47 -0400 Subject: [PATCH 3/5] Remove and sort usings --- NewHorizons/Builder/Body/StarBuilder.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/NewHorizons/Builder/Body/StarBuilder.cs b/NewHorizons/Builder/Body/StarBuilder.cs index 1aba65fdd..cdb68c7e2 100644 --- a/NewHorizons/Builder/Body/StarBuilder.cs +++ b/NewHorizons/Builder/Body/StarBuilder.cs @@ -1,14 +1,12 @@ using NewHorizons.Components.SizeControllers; -using NewHorizons.Utility; -using UnityEngine; +using NewHorizons.Components.Stars; using NewHorizons.External.Modules.VariableSize; +using NewHorizons.Utility; +using NewHorizons.Utility.Files; +using NewHorizons.Utility.OuterWilds; using OWML.Common; using System.Linq; -using NewHorizons.Components.Stars; -using NewHorizons.Utility.OuterWilds; -using NewHorizons.Utility.Files; -using NewHorizons.Utility.OWML; -using UnityEngine.InputSystem.XR; +using UnityEngine; namespace NewHorizons.Builder.Body { From 31674ca79d5869549fbfeae26c1eaa7fca2ee09b Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 12 Aug 2023 17:13:55 -0400 Subject: [PATCH 4/5] Also include scale --- NewHorizons/Builder/Props/DetailBuilder.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/NewHorizons/Builder/Props/DetailBuilder.cs b/NewHorizons/Builder/Props/DetailBuilder.cs index 2c878617d..eeef8d1b0 100644 --- a/NewHorizons/Builder/Props/DetailBuilder.cs +++ b/NewHorizons/Builder/Props/DetailBuilder.cs @@ -190,6 +190,7 @@ public static GameObject Make(GameObject go, Sector sector, GameObject prefab, D newDetailGO.transform.parent = prop.transform.parent; newDetailGO.transform.position = prop.transform.position; newDetailGO.transform.rotation = prop.transform.rotation; + newDetailGO.transform.localScale = prop.transform.localScale; // Can't modify parents while looping through children bc idk var children = new List(); From f51bf0875a98bb3a4f2dcdad2e609cb8ea913239 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 12 Aug 2023 17:18:23 -0400 Subject: [PATCH 5/5] Update manifest.json --- NewHorizons/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NewHorizons/manifest.json b/NewHorizons/manifest.json index 72bbe1d45..a37a3905f 100644 --- a/NewHorizons/manifest.json +++ b/NewHorizons/manifest.json @@ -4,7 +4,7 @@ "author": "xen, Bwc9876, clay, MegaPiggy, John, Trifid, Hawkbar, Book", "name": "New Horizons", "uniqueName": "xen.NewHorizons", - "version": "1.14.3", + "version": "1.14.4", "owmlVersion": "2.9.3", "dependencies": [ "JohnCorby.VanillaFix", "_nebula.MenuFramework", "xen.CommonCameraUtility", "dgarro.CustomShipLogModes" ], "conflicts": [ "Raicuparta.QuantumSpaceBuddies", "PacificEngine.OW_CommonResources" ],