diff --git a/src/Core/Runtime/Il2Cpp/AssetBundle.cs b/src/Core/Runtime/Il2Cpp/AssetBundle.cs index d950296..c660bef 100644 --- a/src/Core/Runtime/Il2Cpp/AssetBundle.cs +++ b/src/Core/Runtime/Il2Cpp/AssetBundle.cs @@ -20,36 +20,43 @@ namespace UnityExplorer // ~~~~~~~~~~~~ Static ~~~~~~~~~~~~ + // AssetBundle.LoadFromFile(string path) + internal delegate IntPtr d_LoadFromFile(IntPtr path, uint crc, ulong offset); [HideFromIl2Cpp] public static AssetBundle LoadFromFile(string path) { - var iCall = ICallManager.GetICall("UnityEngine.AssetBundle::LoadFromFile_Internal"); - var ptr = iCall(IL2CPP.ManagedStringToIl2Cpp(path), 0u, 0UL); - return new AssetBundle(ptr); + IntPtr ptr = ICallManager.GetICall("UnityEngine.AssetBundle::LoadFromFile_Internal") + .Invoke(IL2CPP.ManagedStringToIl2Cpp(path), 0u, 0UL); + + return ptr != IntPtr.Zero ? new AssetBundle(ptr) : null; } + // AssetBundle.LoadFromMemory(byte[] binary) + private delegate IntPtr d_LoadFromMemory(IntPtr binary, uint crc); [HideFromIl2Cpp] public static AssetBundle LoadFromMemory(byte[] binary, uint crc = 0) { - var iCall = ICallManager.GetICall("UnityEngine.AssetBundle::LoadFromMemory_Internal"); - var ptr = iCall(((Il2CppStructArray)binary).Pointer, crc); - return new AssetBundle(ptr); + IntPtr ptr = ICallManager.GetICall("UnityEngine.AssetBundle::LoadFromMemory_Internal") + .Invoke(((Il2CppStructArray)binary).Pointer, crc); + + return ptr != IntPtr.Zero ? new AssetBundle(ptr) : null; } + // AssetBundle.GetAllLoadedAssetBundles() + public delegate IntPtr d_GetAllLoadedAssetBundles_Native(); [HideFromIl2Cpp] public static AssetBundle[] GetAllLoadedAssetBundles() { - var iCall = ICallManager.GetICall("UnityEngine.AssetBundle::GetAllLoadedAssetBundles_Native"); - var ptr = iCall(); - if (ptr == IntPtr.Zero) - return null; - return (AssetBundle[])new Il2CppReferenceArray(ptr); + IntPtr ptr = ICallManager.GetICall("UnityEngine.AssetBundle::GetAllLoadedAssetBundles_Native") + .Invoke(); + + return ptr != IntPtr.Zero ? (AssetBundle[])new Il2CppReferenceArray(ptr) : null; } // ~~~~~~~~~~~~ Instance ~~~~~~~~~~~~ @@ -65,13 +72,10 @@ namespace UnityExplorer [HideFromIl2Cpp] public UnityEngine.Object[] LoadAllAssets() { - var iCall = ICallManager.GetICall("UnityEngine.AssetBundle::LoadAssetWithSubAssets_Internal"); - var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(""), UnhollowerRuntimeLib.Il2CppType.Of().Pointer); + IntPtr ptr = ICallManager.GetICall("UnityEngine.AssetBundle::LoadAssetWithSubAssets_Internal") + .Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(""), UnhollowerRuntimeLib.Il2CppType.Of().Pointer); - if (ptr == IntPtr.Zero) - return new UnityEngine.Object[0]; - - return new Il2CppReferenceArray(ptr); + return ptr != IntPtr.Zero ? (UnityEngine.Object[])new Il2CppReferenceArray(ptr) : new UnityEngine.Object[0]; } // LoadAsset(string name, Type type) @@ -81,13 +85,10 @@ namespace UnityExplorer [HideFromIl2Cpp] public T LoadAsset(string name) where T : UnityEngine.Object { - var iCall = ICallManager.GetICall("UnityEngine.AssetBundle::LoadAsset_Internal"); - var ptr = iCall.Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(name), UnhollowerRuntimeLib.Il2CppType.Of().Pointer); + IntPtr ptr = ICallManager.GetICall("UnityEngine.AssetBundle::LoadAsset_Internal") + .Invoke(m_bundlePtr, IL2CPP.ManagedStringToIl2Cpp(name), UnhollowerRuntimeLib.Il2CppType.Of().Pointer); - if (ptr == IntPtr.Zero) - return null; - - return new UnityEngine.Object(ptr).TryCast(); + return ptr != IntPtr.Zero ? new UnityEngine.Object(ptr).TryCast() : null; } // Unload(bool unloadAllLoadedObjects); @@ -97,8 +98,8 @@ namespace UnityExplorer [HideFromIl2Cpp] public void Unload(bool unloadAllLoadedObjects) { - var iCall = ICallManager.GetICall("UnityEngine.AssetBundle::Unload"); - iCall.Invoke(this.m_bundlePtr, unloadAllLoadedObjects); + ICallManager.GetICall("UnityEngine.AssetBundle::Unload") + .Invoke(this.m_bundlePtr, unloadAllLoadedObjects); } } }