mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Cache details used on the eye
This commit is contained in:
parent
e2f1fb681d
commit
565a0575b8
39
NewHorizons/Handlers/EyeDetailCacher.cs
Normal file
39
NewHorizons/Handlers/EyeDetailCacher.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -341,6 +341,8 @@ namespace NewHorizons
|
||||
{
|
||||
try
|
||||
{
|
||||
EyeDetailCacher.Init();
|
||||
|
||||
AtmosphereBuilder.InitPrefabs();
|
||||
BrambleDimensionBuilder.InitPrefabs();
|
||||
BrambleNodeBuilder.InitPrefabs();
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user