mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Only clear asset bundle cache when changing star system
This commit is contained in:
parent
eef5323869
commit
588995bb9b
@ -164,7 +164,7 @@ namespace NewHorizons.Builder.Body
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(config.ShockEffect.assetBundle) && !string.IsNullOrWhiteSpace(config.ShockEffect.meshPath))
|
||||
{
|
||||
var mesh = AssetBundleUtilities.Load<Mesh>(config.ShockEffect.assetBundle, config.ShockEffect.meshPath, mod);
|
||||
var mesh = AssetBundleUtilities.Load<Mesh>(config.ShockEffect.assetBundle, config.ShockEffect.meshPath, mod, config.starSystem);
|
||||
if (mesh != null)
|
||||
{
|
||||
shockLayer.GetComponent<MeshFilter>().sharedMesh = mesh;
|
||||
|
||||
@ -262,7 +262,7 @@ namespace NewHorizons
|
||||
SearchUtilities.ClearCache();
|
||||
ImageUtilities.ClearCache();
|
||||
AudioUtilities.ClearCache();
|
||||
AssetBundleUtilities.ClearCache();
|
||||
AssetBundleUtilities.OnSceneUnloaded();
|
||||
EnumUtilities.ClearCache();
|
||||
IsSystemReady = false;
|
||||
}
|
||||
|
||||
@ -3,25 +3,42 @@ using OWML.Common;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NewHorizons.Utility.Files
|
||||
{
|
||||
public static class AssetBundleUtilities
|
||||
{
|
||||
public static Dictionary<string, AssetBundle> AssetBundles = new Dictionary<string, AssetBundle>();
|
||||
public static Dictionary<string, (string starSystem, AssetBundle bundle)> AssetBundles = new();
|
||||
|
||||
public static void ClearCache()
|
||||
public static void OnSceneUnloaded()
|
||||
{
|
||||
foreach (var pair in AssetBundles)
|
||||
var bundleKeys = AssetBundles.Keys.ToArray();
|
||||
|
||||
foreach (var key in bundleKeys)
|
||||
{
|
||||
if (pair.Value == null) NHLogger.LogError($"The asset bundle for {pair.Key} was null when trying to unload");
|
||||
else pair.Value.Unload(true);
|
||||
var (starSystem, bundle) = AssetBundles[key];
|
||||
// If the star system is null/empty keep loaded forever, else only unload when we leave the system
|
||||
if (!string.IsNullOrEmpty(starSystem) && starSystem != Main.Instance.CurrentStarSystem)
|
||||
{
|
||||
if (bundle == null) NHLogger.LogError($"The asset bundle for [{key}] was null when trying to unload");
|
||||
else bundle.Unload(true);
|
||||
|
||||
AssetBundles.Remove(key);
|
||||
}
|
||||
else
|
||||
{
|
||||
NHLogger.LogVerbose($"Not unloading bundle [{key}] because it is still in use for system [{starSystem}]");
|
||||
}
|
||||
}
|
||||
AssetBundles.Clear();
|
||||
}
|
||||
|
||||
// On the off chance this was being called from another mod
|
||||
public static T Load<T>(string assetBundleRelativeDir, string pathInBundle, IModBehaviour mod) where T : UnityEngine.Object
|
||||
=> Load<T>(assetBundleRelativeDir, pathInBundle, mod, Main.Instance.CurrentStarSystem);
|
||||
|
||||
public static T Load<T>(string assetBundleRelativeDir, string pathInBundle, IModBehaviour mod, string starSystem) where T : UnityEngine.Object
|
||||
{
|
||||
string key = Path.GetFileName(assetBundleRelativeDir);
|
||||
T obj;
|
||||
@ -32,7 +49,7 @@ namespace NewHorizons.Utility.Files
|
||||
|
||||
if (AssetBundles.ContainsKey(key))
|
||||
{
|
||||
bundle = AssetBundles[key];
|
||||
bundle = AssetBundles[key].bundle;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -44,7 +61,7 @@ namespace NewHorizons.Utility.Files
|
||||
return null;
|
||||
}
|
||||
|
||||
AssetBundles[key] = bundle;
|
||||
AssetBundles[key] = (starSystem, bundle);
|
||||
}
|
||||
|
||||
obj = bundle.LoadAsset<T>(pathInBundle);
|
||||
@ -60,7 +77,7 @@ namespace NewHorizons.Utility.Files
|
||||
|
||||
public static GameObject LoadPrefab(string assetBundleRelativeDir, string pathInBundle, IModBehaviour mod)
|
||||
{
|
||||
var prefab = Load<GameObject>(assetBundleRelativeDir, pathInBundle, mod);
|
||||
var prefab = Load<GameObject>(assetBundleRelativeDir, pathInBundle, mod, Main.Instance.CurrentStarSystem);
|
||||
|
||||
prefab.SetActive(false);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user