mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Fix flares being white #668
This commit is contained in:
parent
0a76fca4cb
commit
1416e07f9b
@ -8,6 +8,7 @@ using NewHorizons.Components.Stars;
|
|||||||
using NewHorizons.Utility.OuterWilds;
|
using NewHorizons.Utility.OuterWilds;
|
||||||
using NewHorizons.Utility.Files;
|
using NewHorizons.Utility.Files;
|
||||||
using NewHorizons.Utility.OWML;
|
using NewHorizons.Utility.OWML;
|
||||||
|
using UnityEngine.InputSystem.XR;
|
||||||
|
|
||||||
namespace NewHorizons.Builder.Body
|
namespace NewHorizons.Builder.Body
|
||||||
{
|
{
|
||||||
@ -54,6 +55,7 @@ namespace NewHorizons.Builder.Body
|
|||||||
if (_starSurface == null) _starSurface = SearchUtilities.Find("Sun_Body/Sector_SUN/Geometry_SUN/Surface").InstantiateInactive().Rename("Prefab_Surface_Star").DontDestroyOnLoad();
|
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 (_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 (_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<SunController>()._startSurfaceMaterial).DontDestroyOnLoad();
|
if (_mainSequenceMaterial == null) _mainSequenceMaterial = new Material(SearchUtilities.Find("Sun_Body").GetComponent<SunController>()._startSurfaceMaterial).DontDestroyOnLoad();
|
||||||
if (_giantMaterial == null) _giantMaterial = new Material(SearchUtilities.Find("Sun_Body").GetComponent<SunController>()._endSurfaceMaterial).DontDestroyOnLoad();
|
if (_giantMaterial == null) _giantMaterial = new Material(SearchUtilities.Find("Sun_Body").GetComponent<SunController>()._endSurfaceMaterial).DontDestroyOnLoad();
|
||||||
if (_flareMaterial == null)
|
if (_flareMaterial == null)
|
||||||
@ -344,7 +346,6 @@ namespace NewHorizons.Builder.Body
|
|||||||
solarFlareEmitter.transform.localPosition = Vector3.zero;
|
solarFlareEmitter.transform.localPosition = Vector3.zero;
|
||||||
solarFlareEmitter.transform.localScale = Vector3.one;
|
solarFlareEmitter.transform.localScale = Vector3.one;
|
||||||
solarFlareEmitter.name = "SolarFlareEmitter";
|
solarFlareEmitter.name = "SolarFlareEmitter";
|
||||||
solarFlareEmitter.SetActive(true);
|
|
||||||
|
|
||||||
var emitter = solarFlareEmitter.GetComponent<SolarFlareEmitter>();
|
var emitter = solarFlareEmitter.GetComponent<SolarFlareEmitter>();
|
||||||
|
|
||||||
@ -361,10 +362,19 @@ namespace NewHorizons.Builder.Body
|
|||||||
}
|
}
|
||||||
|
|
||||||
var material = new Material(_flareMaterial);
|
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<SolarFlareController>())
|
||||||
|
.Concat(emitter.GetComponentsInChildren<SolarFlareController>()))
|
||||||
{
|
{
|
||||||
var controller = prefab.GetComponent<SolarFlareController>();
|
|
||||||
// controller._meshRenderer doesn't exist yet since Awake hasn't been called
|
// controller._meshRenderer doesn't exist yet since Awake hasn't been called
|
||||||
if (starModule.tint != null)
|
if (starModule.tint != null)
|
||||||
{
|
{
|
||||||
@ -376,6 +386,8 @@ namespace NewHorizons.Builder.Body
|
|||||||
{
|
{
|
||||||
controller._scaleFactor = Vector3.one * starModule.solarFlareSettings.scaleFactor;
|
controller._scaleFactor = Vector3.one * starModule.solarFlareSettings.scaleFactor;
|
||||||
}
|
}
|
||||||
|
controller.gameObject.SetActive(true);
|
||||||
|
controller.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
starGO.transform.position = rootObject.transform.position;
|
starGO.transform.position = rootObject.transform.position;
|
||||||
@ -413,6 +425,8 @@ namespace NewHorizons.Builder.Body
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
solarFlareEmitter.SetActive(true);
|
||||||
|
|
||||||
return starGO;
|
return starGO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
21
NewHorizons/Patches/SolarFlareEmitterPatches.cs
Normal file
21
NewHorizons/Patches/SolarFlareEmitterPatches.cs
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user