summaryrefslogtreecommitdiff
path: root/Thronefall_1_57/Decompile/I2.Loc/ResourceManager.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-05-19 16:05:58 +0800
committerchai <215380520@qq.com>2024-05-19 16:05:58 +0800
commit8e13e7e2874adc8982e16d1d2ed2e28d7480b45f (patch)
tree63ef85c460288891f5a593d69afeca16cba050b3 /Thronefall_1_57/Decompile/I2.Loc/ResourceManager.cs
parentc5f145786f4c6d2fe4bea831dfc16e52228920a5 (diff)
+1.57
Diffstat (limited to 'Thronefall_1_57/Decompile/I2.Loc/ResourceManager.cs')
-rw-r--r--Thronefall_1_57/Decompile/I2.Loc/ResourceManager.cs160
1 files changed, 160 insertions, 0 deletions
diff --git a/Thronefall_1_57/Decompile/I2.Loc/ResourceManager.cs b/Thronefall_1_57/Decompile/I2.Loc/ResourceManager.cs
new file mode 100644
index 0000000..793bb21
--- /dev/null
+++ b/Thronefall_1_57/Decompile/I2.Loc/ResourceManager.cs
@@ -0,0 +1,160 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+
+namespace I2.Loc;
+
+public class ResourceManager : MonoBehaviour
+{
+ private static ResourceManager mInstance;
+
+ public List<IResourceManager_Bundles> mBundleManagers = new List<IResourceManager_Bundles>();
+
+ public UnityEngine.Object[] Assets;
+
+ private readonly Dictionary<string, UnityEngine.Object> mResourcesCache = new Dictionary<string, UnityEngine.Object>(StringComparer.Ordinal);
+
+ public static ResourceManager pInstance
+ {
+ get
+ {
+ bool flag = mInstance == null;
+ if (mInstance == null)
+ {
+ mInstance = (ResourceManager)UnityEngine.Object.FindObjectOfType(typeof(ResourceManager));
+ }
+ if (mInstance == null)
+ {
+ GameObject obj = new GameObject("I2ResourceManager", typeof(ResourceManager));
+ obj.hideFlags |= HideFlags.HideAndDontSave;
+ mInstance = obj.GetComponent<ResourceManager>();
+ SceneManager.sceneLoaded += MyOnLevelWasLoaded;
+ }
+ if (flag && Application.isPlaying)
+ {
+ UnityEngine.Object.DontDestroyOnLoad(mInstance.gameObject);
+ }
+ return mInstance;
+ }
+ }
+
+ public static void MyOnLevelWasLoaded(Scene scene, LoadSceneMode mode)
+ {
+ pInstance.CleanResourceCache();
+ LocalizationManager.UpdateSources();
+ }
+
+ public T GetAsset<T>(string Name) where T : UnityEngine.Object
+ {
+ T val = FindAsset(Name) as T;
+ if ((UnityEngine.Object)val != (UnityEngine.Object)null)
+ {
+ return val;
+ }
+ return LoadFromResources<T>(Name);
+ }
+
+ private UnityEngine.Object FindAsset(string Name)
+ {
+ if (Assets != null)
+ {
+ int i = 0;
+ for (int num = Assets.Length; i < num; i++)
+ {
+ if (Assets[i] != null && Assets[i].name == Name)
+ {
+ return Assets[i];
+ }
+ }
+ }
+ return null;
+ }
+
+ public bool HasAsset(UnityEngine.Object Obj)
+ {
+ if (Assets == null)
+ {
+ return false;
+ }
+ return Array.IndexOf(Assets, Obj) >= 0;
+ }
+
+ public T LoadFromResources<T>(string Path) where T : UnityEngine.Object
+ {
+ try
+ {
+ if (string.IsNullOrEmpty(Path))
+ {
+ return null;
+ }
+ if (mResourcesCache.TryGetValue(Path, out var value) && value != null)
+ {
+ return value as T;
+ }
+ T val = null;
+ if (Path.EndsWith("]", StringComparison.OrdinalIgnoreCase))
+ {
+ int num = Path.LastIndexOf("[", StringComparison.OrdinalIgnoreCase);
+ int length = Path.Length - num - 2;
+ string value2 = Path.Substring(num + 1, length);
+ Path = Path.Substring(0, num);
+ T[] array = Resources.LoadAll<T>(Path);
+ int i = 0;
+ for (int num2 = array.Length; i < num2; i++)
+ {
+ if (array[i].name.Equals(value2))
+ {
+ val = array[i];
+ break;
+ }
+ }
+ }
+ else
+ {
+ val = Resources.Load(Path, typeof(T)) as T;
+ }
+ if ((UnityEngine.Object)val == (UnityEngine.Object)null)
+ {
+ val = LoadFromBundle<T>(Path);
+ }
+ if ((UnityEngine.Object)val != (UnityEngine.Object)null)
+ {
+ mResourcesCache[Path] = val;
+ }
+ return val;
+ }
+ catch (Exception ex)
+ {
+ Debug.LogErrorFormat("Unable to load {0} '{1}'\nERROR: {2}", typeof(T), Path, ex.ToString());
+ return null;
+ }
+ }
+
+ public T LoadFromBundle<T>(string path) where T : UnityEngine.Object
+ {
+ int i = 0;
+ for (int count = mBundleManagers.Count; i < count; i++)
+ {
+ if (mBundleManagers[i] != null)
+ {
+ T val = mBundleManagers[i].LoadFromBundle(path, typeof(T)) as T;
+ if ((UnityEngine.Object)val != (UnityEngine.Object)null)
+ {
+ return val;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void CleanResourceCache(bool unloadResources = false)
+ {
+ mResourcesCache.Clear();
+ if (unloadResources)
+ {
+ Resources.UnloadUnusedAssets();
+ }
+ CancelInvoke();
+ }
+}