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); } }