using System; using System.Collections; using System.Collections.Generic; using RoR2.ContentManagement; using UnityEngine; namespace RoR2.Modding; public class LegacyModContentPackProvider : IContentPackProvider { private ContentPack finalizedContentPack; public static LegacyModContentPackProvider instance { get; private set; } = new LegacyModContentPackProvider(); public ContentPack registrationContentPack { get; private set; } public bool cutoffReached { get; private set; } public string identifier => "RoR2.LegacyModContent"; private LegacyModContentPackProvider() { registrationContentPack = new ContentPack(); finalizedContentPack = new ContentPack(); ContentManager.collectContentPackProviders += delegate(ContentManager.AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider(this); }; } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { ContentPack.Copy(registrationContentPack, finalizedContentPack); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(finalizedContentPack, args.output); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { ContentPack.Copy(new ContentPack(), registrationContentPack); finalizedContentPack = null; yield break; } public void HandleLegacyGetAdditionalEntries(string eventName, Action> callback, NamedAssetCollection dest) { if (cutoffReached) { throw new InvalidOperationException("Legacy mod ContentPack has been finalized. It is too late to add additional entries via " + eventName + "."); } List list = new List(); try { callback?.Invoke(list); dest.Add(list.ToArray()); Debug.LogWarning("Added content to legacy mod ContentPack via " + eventName + " succeeded. Do not use this code path; it will be removed in a future update. Use IContentPackProvider instead."); } catch (Exception arg) { Debug.LogError($"Adding content to legacy mod ContentPack via {eventName} failed: {arg}."); } } }