Skip to content
This repository was archived by the owner on May 9, 2023. It is now read-only.

Commit 239534e

Browse files
committed
Add GetAllLoadedAssetBundles
1 parent bc5d160 commit 239534e

File tree

1 file changed

+33
-10
lines changed

1 file changed

+33
-10
lines changed

src/Core/Runtime/Il2Cpp/AssetBundle.cs

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,69 @@
44
using System.Linq;
55
using System.Text;
66
using UnhollowerBaseLib;
7+
using UnhollowerBaseLib.Attributes;
78
using UnhollowerRuntimeLib;
89
using UnityEngine;
910
using UnityExplorer.Core.Runtime.Il2Cpp;
1011

1112
namespace UnityExplorer
1213
{
13-
public class AssetBundle
14+
public class AssetBundle : UnityEngine.Object
1415
{
16+
static AssetBundle()
17+
{
18+
ClassInjector.RegisterTypeInIl2Cpp<AssetBundle>();
19+
}
20+
1521
// ~~~~~~~~~~~~ Static ~~~~~~~~~~~~
1622

1723
internal delegate IntPtr d_LoadFromFile(IntPtr path, uint crc, ulong offset);
1824

25+
[HideFromIl2Cpp]
1926
public static AssetBundle LoadFromFile(string path)
2027
{
2128
var iCall = ICallManager.GetICall<d_LoadFromFile>("UnityEngine.AssetBundle::LoadFromFile_Internal");
22-
var ptr = iCall.Invoke(IL2CPP.ManagedStringToIl2Cpp(path), 0u, 0UL);
29+
var ptr = iCall(IL2CPP.ManagedStringToIl2Cpp(path), 0u, 0UL);
2330
return new AssetBundle(ptr);
2431
}
25-
32+
2633
private delegate IntPtr d_LoadFromMemory(IntPtr binary, uint crc);
2734

35+
[HideFromIl2Cpp]
2836
public static AssetBundle LoadFromMemory(byte[] binary, uint crc = 0)
2937
{
3038
var iCall = ICallManager.GetICall<d_LoadFromMemory>("UnityEngine.AssetBundle::LoadFromMemory_Internal");
31-
var ptr = iCall(((Il2CppStructArray<byte>) binary).Pointer, crc);
39+
var ptr = iCall(((Il2CppStructArray<byte>)binary).Pointer, crc);
3240
return new AssetBundle(ptr);
3341
}
3442

43+
public delegate IntPtr d_GetAllLoadedAssetBundles_Native();
44+
45+
[HideFromIl2Cpp]
46+
public static AssetBundle[] GetAllLoadedAssetBundles()
47+
{
48+
var iCall = ICallManager.GetICall<d_GetAllLoadedAssetBundles_Native>("UnityEngine.AssetBundle::GetAllLoadedAssetBundles_Native");
49+
var ptr = iCall();
50+
if (ptr == IntPtr.Zero)
51+
return null;
52+
return (AssetBundle[])new Il2CppReferenceArray<AssetBundle>(ptr);
53+
}
54+
3555
// ~~~~~~~~~~~~ Instance ~~~~~~~~~~~~
3656

37-
private readonly IntPtr m_bundlePtr = IntPtr.Zero;
57+
public readonly IntPtr m_bundlePtr = IntPtr.Zero;
3858

39-
public AssetBundle(IntPtr ptr) { m_bundlePtr = ptr; }
59+
public AssetBundle(IntPtr ptr) : base(ptr) { m_bundlePtr = ptr; }
4060

4161
// LoadAllAssets()
4262

4363
internal delegate IntPtr d_LoadAssetWithSubAssets_Internal(IntPtr _this, IntPtr name, IntPtr type);
4464

65+
[HideFromIl2Cpp]
4566
public UnityEngine.Object[] LoadAllAssets()
4667
{
4768
var iCall = ICallManager.GetICall<d_LoadAssetWithSubAssets_Internal>("UnityEngine.AssetBundle::LoadAssetWithSubAssets_Internal");
48-
var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(""), Il2CppType.Of<UnityEngine.Object>().Pointer);
69+
var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(""), UnhollowerRuntimeLib.Il2CppType.Of<UnityEngine.Object>().Pointer);
4970

5071
if (ptr == IntPtr.Zero)
5172
return new UnityEngine.Object[0];
@@ -57,10 +78,11 @@ public UnityEngine.Object[] LoadAllAssets()
5778

5879
internal delegate IntPtr d_LoadAsset_Internal(IntPtr _this, IntPtr name, IntPtr type);
5980

81+
[HideFromIl2Cpp]
6082
public T LoadAsset<T>(string name) where T : UnityEngine.Object
6183
{
6284
var iCall = ICallManager.GetICall<d_LoadAsset_Internal>("UnityEngine.AssetBundle::LoadAsset_Internal");
63-
var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(name), Il2CppType.Of<T>().Pointer);
85+
var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(name), UnhollowerRuntimeLib.Il2CppType.Of<T>().Pointer);
6486

6587
if (ptr == IntPtr.Zero)
6688
return null;
@@ -72,10 +94,11 @@ public T LoadAsset<T>(string name) where T : UnityEngine.Object
7294

7395
internal delegate void d_Unload(IntPtr _this, bool unloadAllLoadedObjects);
7496

75-
public void Unload(bool unloadAssets = true)
97+
[HideFromIl2Cpp]
98+
public void Unload(bool unloadAllLoadedObjects)
7699
{
77100
var iCall = ICallManager.GetICall<d_Unload>("UnityEngine.AssetBundle::Unload");
78-
iCall.Invoke(this.m_bundlePtr, unloadAssets);
101+
iCall.Invoke(this.m_bundlePtr, unloadAllLoadedObjects);
79102
}
80103
}
81104
}

0 commit comments

Comments
 (0)