using System; using System.Reflection; using System.Resources; using MelonLoader; using UnityEngine; namespace ADOFAIRenderer.Util; internal static class BundleLoader { private static readonly string BundlePlatform; private static readonly Assembly? ExecutingAssembly; static BundleLoader() { BundlePlatform = Application.platform switch { RuntimePlatform.WindowsPlayer => "Win64", RuntimePlatform.OSXPlayer => "OSX", _ => "Linux" }; ExecutingAssembly = Assembly.GetExecutingAssembly(); } public static AssetBundle GetBundle(string resourcePath) { if (ExecutingAssembly != null) { var bundlePath = $"ADOFAIRenderer.Bundle.{BundlePlatform}.{resourcePath}"; using var resourceStream = ExecutingAssembly.GetManifestResourceStream(bundlePath); if (resourceStream != null) { return AssetBundle.LoadFromStream(resourceStream); } Melon.Logger.Error($"Could not find bundle resource in DLL.\n{bundlePath}"); throw new MissingManifestResourceException("Could not find bundle resource in DLL."); } Melon.Logger.Error("Executing assembly has not been set properly."); throw new InvalidOperationException("ExecutingAssembly has not been set."); } }