Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of LoadingScreenSpriteFix v2.0.1
plugins/LoadingScreenFix.dll
Decompiled 6 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HG; using On.RoR2; using On.RoR2.UI.MainMenu; using RoR2; using RoR2.UI; using RoR2.UI.MainMenu; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LoadingScreenFix")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+2b29a022d2c138ed094218a680b10f064bb712cc")] [assembly: AssemblyProduct("LoadingScreenFix")] [assembly: AssemblyTitle("LoadingScreenFix")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace LoadingScreenFix; [BepInPlugin("Nebby1999.LoadingScreenFix", "LoadingScreenFix", "2.0.0")] public class LoadingScreenFix : BaseUnityPlugin { public const string PluginGUID = "Nebby1999.LoadingScreenFix"; public const string PluginAuthor = "Nebby1999"; public const string PluginName = "LoadingScreenFix"; public const string PluginVersion = "2.0.0"; private GameObject _blackBackground; private GameObject _walkPrefab; private List<SimpleSpriteAnimation> _spriteAnimations = new List<SimpleSpriteAnimation>(); private HashSet<AssetBundle> _assetBundles = new HashSet<AssetBundle>(); private List<Image> _blackBackgroundInstances = new List<Image>(); private AssetBundle _myBundle; private static bool _pastOrigSelfOnPickRandomObjectOnAwake; internal static LoadingScreenFix instance; internal static ManualLogSource logger; private void Awake() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown instance = this; logger = ((BaseUnityPlugin)this).Logger; LoadBundle(); PickRandomObjectOnAwake.OnEnable += new hook_OnEnable(AddBlackBackgroundAndSpriteAnimations); MainMenuController.Awake += new hook_Awake(FreeMemoryAndDestroySelf); SceneManager.sceneLoaded += DisableBlackBackgrounds; Log("Awake Called"); } public static void AddSpriteAnimations(AssetBundle sourceBundle) { if (_pastOrigSelfOnPickRandomObjectOnAwake) { ((BaseUnityPlugin)instance).Logger.LogInfo((object)"Too late! we're already past the loading screen, consider calling the API's methods on your mod's awake."); return; } instance._assetBundles.Add(sourceBundle); SimpleSpriteAnimation[] array = sourceBundle.LoadAllAssets<SimpleSpriteAnimation>(); for (int i = 0; i < array.Length; i++) { AddSpriteAnimation(array[i]); } } public static void AddSpriteAnimation(SimpleSpriteAnimation spriteAnimation, AssetBundle sourceBundle) { if (_pastOrigSelfOnPickRandomObjectOnAwake) { ((BaseUnityPlugin)instance).Logger.LogInfo((object)"Too late! we're already past the loading screen, consider calling the API's methods on your mod's awake."); return; } instance._assetBundles.Add(sourceBundle); AddSpriteAnimation(spriteAnimation); } public static void AddSpriteAnimation(SimpleSpriteAnimation spriteAnimation) { if (_pastOrigSelfOnPickRandomObjectOnAwake) { ((BaseUnityPlugin)instance).Logger.LogInfo((object)"Too late! we're already past the loading screen, consider calling the API's methods on your mod's awake."); } else { instance._spriteAnimations.Add(spriteAnimation); } } private void LoadBundle() { string text = Path.Combine(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "assetbundles"), "loadingscreenutility"); _myBundle = AssetBundle.LoadFromFile(text); _walkPrefab = _myBundle.LoadAsset<GameObject>("CustomSpriteWalk"); } private void FreeMemoryAndDestroySelf(orig_Awake orig, MainMenuController self) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown orig.Invoke(self); Log("Freeing resources and killing self."); PickRandomObjectOnAwake.OnEnable -= new hook_OnEnable(AddBlackBackgroundAndSpriteAnimations); MainMenuController.Awake -= new hook_Awake(FreeMemoryAndDestroySelf); SceneManager.sceneLoaded -= DisableBlackBackgrounds; if (Object.op_Implicit((Object)(object)_blackBackground)) { Log("Destroying Black Background"); Object.Destroy((Object)(object)_blackBackground); } foreach (SimpleSpriteAnimation spriteAnimation in _spriteAnimations) { Log("Destroying " + (object)spriteAnimation); Object.Destroy((Object)(object)spriteAnimation); } foreach (AssetBundle assetBundle in _assetBundles) { Log("Unloading " + (object)assetBundle); assetBundle.Unload(true); } Log("Unloading own bundle"); _myBundle.Unload(true); } private void DisableBlackBackgrounds(Scene arg0, LoadSceneMode arg1) { Log("Checking if splash"); if (((Scene)(ref arg0)).name == "splash") { Log("Its splash, disabling all black backgrounds."); { foreach (Image blackBackgroundInstance in _blackBackgroundInstances) { ((Behaviour)blackBackgroundInstance).enabled = false; } return; } } Log("Not Splash"); } private void AddBlackBackgroundAndSpriteAnimations(orig_OnEnable orig, PickRandomObjectOnAwake self) { if (((Object)((Component)self).gameObject).name != "MiniScene") { orig.Invoke(self); return; } _pastOrigSelfOnPickRandomObjectOnAwake = true; AddSprites(self); AddBackgrounds(self); orig.Invoke(self); } private void AddSprites(PickRandomObjectOnAwake self) { //IL_0065: Unknown result type (might be due to invalid IL or missing references) foreach (SimpleSpriteAnimation spriteAnimation in _spriteAnimations) { try { Log($"Creating sprite for {spriteAnimation}"); GameObject val = Object.Instantiate<GameObject>(_walkPrefab, ((Component)self).transform); ((Object)val).name = $"{spriteAnimation}Animator"; SimpleSpriteAnimator componentInChildren = val.GetComponentInChildren<SimpleSpriteAnimator>(); componentInChildren.animation = spriteAnimation; componentInChildren.target.sprite = spriteAnimation.frames.FirstOrDefault().sprite; ArrayUtils.ArrayAppend<GameObject>(ref self.ObjectsToSelect, ref val); } catch (Exception arg) { ((BaseUnityPlugin)this).Logger.LogError((object)$"Failed to add sprite animation for {spriteAnimation}.\n{arg}"); } } } private void AddBackgrounds(PickRandomObjectOnAwake self) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) _blackBackground = new GameObject("BlackBackground"); RectTransform obj = _blackBackground.AddComponent<RectTransform>(); ((Transform)obj).SetParent(((Component)self).transform.parent); ((Transform)obj).SetAsFirstSibling(); obj.sizeDelta = new Vector2(256f, 256f); ((Transform)obj).localPosition = new Vector3(64f, 16f, -16f); Image val = _blackBackground.AddComponent<Image>(); _blackBackgroundInstances.Add(val); ((Graphic)val).color = Color.black; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private void Log(object thing) { } } public static class SimpleSpriteAnimationGenerator { public static SimpleSpriteAnimation CreateSpriteAnimation(IEnumerable<Sprite> sprites, IEnumerable<int> durations, float framerate) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) Sprite[] array = sprites.ToArray(); int[] array2 = durations.ToArray(); int num = array.Length; Frame[] array3 = (Frame[])(object)new Frame[num]; for (int i = 0; i < num; i++) { int duration = 1; if (ArrayUtils.IsInBounds<int>(array2, i)) { duration = array2[i]; } array3[i] = new Frame { duration = duration, sprite = array[i] }; } SimpleSpriteAnimationArguments args = default(SimpleSpriteAnimationArguments); args.framerate = framerate; args.frames = array3; return CreateInternal(args); } public static SimpleSpriteAnimation CreateSpriteAnimation(IEnumerable<(Sprite, int)> spritesAndDurations, float framerate) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) (Sprite, int)[] array = spritesAndDurations.ToArray(); int num = array.Length; Frame[] array2 = (Frame[])(object)new Frame[num]; for (int i = 0; i < num; i++) { array2[i] = new Frame { sprite = array[i].Item1, duration = array[i].Item2 }; } SimpleSpriteAnimationArguments args = default(SimpleSpriteAnimationArguments); args.frames = array2; args.framerate = framerate; return CreateInternal(args); } public static SimpleSpriteAnimation CreateSpriteAnimation(Frame[] frames, float framerate) { SimpleSpriteAnimationArguments args = default(SimpleSpriteAnimationArguments); args.frames = frames; args.framerate = framerate; return CreateInternal(args); } public static SimpleSpriteAnimation CreateSpriteAnimation(SimpleSpriteAnimationArguments args) { return CreateInternal(args); } private static SimpleSpriteAnimation CreateInternal(SimpleSpriteAnimationArguments args) { SimpleSpriteAnimation obj = ScriptableObject.CreateInstance<SimpleSpriteAnimation>(); obj.frames = args.frames; obj.frameRate = args.framerate; return obj; } } public struct SimpleSpriteAnimationArguments { public Frame[] frames; public float framerate; }