From d1f33eb336ba67ab47c0cbf4b184d41fd2b20803 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 4 Mar 2022 01:50:55 -0500 Subject: [PATCH] Use caching --- NewHorizons/Handlers/OWAssetHandler.cs | 28 +++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/NewHorizons/Handlers/OWAssetHandler.cs b/NewHorizons/Handlers/OWAssetHandler.cs index ec435208..1f1841b8 100644 --- a/NewHorizons/Handlers/OWAssetHandler.cs +++ b/NewHorizons/Handlers/OWAssetHandler.cs @@ -10,9 +10,11 @@ namespace NewHorizons.Handlers { public static class OWAssetHandler { + private static Dictionary _materialCache; + public static void Init() { - + _materialCache = new Dictionary(); } public static void LoadObject(GameObject obj) @@ -30,22 +32,34 @@ namespace NewHorizons.Handlers if (streamingHandle is StreamingRenderMeshHandle || streamingHandle is StreamingSkinnedMeshHandle) { var materials = streamingHandle.GetComponent().sharedMaterials; - foreach (var table in tables) + + if (materials.Length == 0) continue; + + if (_materialCache == null) _materialCache = new Dictionary(); + + if (_materialCache.TryGetValue(materials[0], out assetBundle)) { - foreach(var x in table._materialPropertyLookups) + assetBundles.Add(assetBundle); + } + else + { + foreach (var table in tables) { - if(materials.Contains(x.material)) + foreach (var x in table._materialPropertyLookups) { - assetBundles.SafeAdd(table.assetBundle); + if (materials.Contains(x.material)) + { + _materialCache.SafeAdd(x.material, table.assetBundle); + assetBundles.SafeAdd(table.assetBundle); + } } - } + } } } } foreach (var assetBundle in assetBundles) { - Logger.Log($"Loading {assetBundles.Count} : {assetBundle}"); StreamingManager.LoadStreamingAssets(assetBundle); } }