Cache details used on the eye

This commit is contained in:
Nick 2024-06-18 21:04:00 -04:00
parent e2f1fb681d
commit 565a0575b8
3 changed files with 49 additions and 0 deletions

View File

@ -0,0 +1,39 @@
using NewHorizons.Utility;
using NewHorizons.Utility.OWML;
using System.Linq;
namespace NewHorizons.Handlers;
public static class EyeDetailCacher
{
public static void Init()
{
foreach (var body in Main.BodyDict["EyeOfTheUniverse"])
{
NHLogger.LogVerbose($"{nameof(EyeDetailCacher)}: {body.Config.name}");
if (body.Config?.Props?.details == null) continue;
foreach (var detail in body.Config.Props.details)
{
NHLogger.LogVerbose($"{nameof(EyeDetailCacher)}: {detail.path}");
if (string.IsNullOrEmpty(detail.path)) continue;
var planet = detail.path.Contains('/') ? detail.path.Split('/').First() : string.Empty;
// TODO: what other root paths can we ignore
if (planet != "EyeOfTheUniverse_Body" && planet != "Vessel_Body")
{
NHLogger.LogVerbose($"{nameof(EyeDetailCacher)}: Looking for {detail.path}");
var obj = SearchUtilities.Find(detail.path);
if (obj != null)
{
NHLogger.LogVerbose($"{nameof(EyeDetailCacher)}: Added solar system asset to dont destroy on load cache for eye: {detail.path}");
SearchUtilities.AddToDontDestroyOnLoadCache(detail.path, obj);
}
}
}
}
}
}

View File

@ -341,6 +341,8 @@ namespace NewHorizons
{
try
{
EyeDetailCacher.Init();
AtmosphereBuilder.InitPrefabs();
BrambleDimensionBuilder.InitPrefabs();
BrambleNodeBuilder.InitPrefabs();

View File

@ -9,9 +9,15 @@ namespace NewHorizons.Utility
{
public static class SearchUtilities
{
private static readonly Dictionary<string, GameObject> DontDestroyOnLoadCachedGameObjects = new Dictionary<string, GameObject>();
private static readonly Dictionary<string, GameObject> CachedGameObjects = new Dictionary<string, GameObject>();
private static readonly Dictionary<string, GameObject> CachedRootGameObjects = new Dictionary<string, GameObject>();
public static void AddToDontDestroyOnLoadCache(string path, GameObject go)
{
DontDestroyOnLoadCachedGameObjects[path] = go.InstantiateInactive().DontDestroyOnLoad();
}
public static void ClearCache()
{
NHLogger.LogVerbose("Clearing search cache");
@ -96,6 +102,8 @@ namespace NewHorizons.Utility
/// </summary>
public static GameObject Find(string path, bool warn = true)
{
if (DontDestroyOnLoadCachedGameObjects.TryGetValue(path, out var gameObject)) return gameObject;
if (CachedGameObjects.TryGetValue(path, out var go)) return go;
// 1: normal find