diff --git a/NewHorizons/Builder/Props/DetailBuilder.cs b/NewHorizons/Builder/Props/DetailBuilder.cs index e01250f6..56a4d4e5 100644 --- a/NewHorizons/Builder/Props/DetailBuilder.cs +++ b/NewHorizons/Builder/Props/DetailBuilder.cs @@ -10,6 +10,7 @@ using Logger = NewHorizons.Utility.Logger; using NewHorizons.External; using OWML.Common; using NewHorizons.External.Configs; +using NewHorizons.Handlers; namespace NewHorizons.Builder.Props { @@ -63,21 +64,8 @@ namespace NewHorizons.Builder.Props GameObject prop = GameObject.Instantiate(prefab, sector.transform); prop.SetActive(false); - List assetBundles = new List(); - foreach (var streamingHandle in prop.GetComponentsInChildren()) - { - var assetBundle = streamingHandle.assetBundle; - if (!assetBundles.Contains(assetBundle)) - { - assetBundles.Add(assetBundle); - } - } - - foreach (var assetBundle in assetBundles) - { - sector.OnOccupantEnterSector += (SectorDetector sd) => StreamingManager.LoadStreamingAssets(assetBundle); - StreamingManager.LoadStreamingAssets(assetBundle); - } + sector.OnOccupantEnterSector += (SectorDetector sd) => OWAssetHandler.LoadObject(prop); + OWAssetHandler.LoadObject(prop); foreach (var component in prop.GetComponents().Concat(prop.GetComponentsInChildren())) { diff --git a/NewHorizons/Handlers/OWAssetHandler.cs b/NewHorizons/Handlers/OWAssetHandler.cs new file mode 100644 index 00000000..ec435208 --- /dev/null +++ b/NewHorizons/Handlers/OWAssetHandler.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Logger = NewHorizons.Utility.Logger; + +namespace NewHorizons.Handlers +{ + public static class OWAssetHandler + { + public static void Init() + { + + } + + public static void LoadObject(GameObject obj) + { + var assetBundles = new List(); + + var tables = Resources.FindObjectsOfTypeAll(); + foreach (var streamingHandle in obj.GetComponentsInChildren()) + { + var assetBundle = streamingHandle.assetBundle; + if (!assetBundles.Contains(assetBundle)) + { + assetBundles.Add(assetBundle); + } + if (streamingHandle is StreamingRenderMeshHandle || streamingHandle is StreamingSkinnedMeshHandle) + { + var materials = streamingHandle.GetComponent().sharedMaterials; + foreach (var table in tables) + { + foreach(var x in table._materialPropertyLookups) + { + if(materials.Contains(x.material)) + { + assetBundles.SafeAdd(table.assetBundle); + } + } + } + } + } + + foreach (var assetBundle in assetBundles) + { + Logger.Log($"Loading {assetBundles.Count} : {assetBundle}"); + StreamingManager.LoadStreamingAssets(assetBundle); + } + } + } +} diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 55426627..9475c095 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -190,6 +190,7 @@ namespace NewHorizons SignalBuilder.Init(); AstroObjectLocator.RefreshList(); PlanetCreationHandler.Init(BodyDict[CurrentStarSystem]); + OWAssetHandler.Init(); LoadTranslations(ModHelper.Manifest.ModFolderPath + "AssetBundle/", this); Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => Locator.GetPlayerBody().gameObject.AddComponent());