Decompiled source of RockCamDetachedPreviewManager v1.1.3

Mods/RockCamDetachedPreviewManager.dll

Decompiled a week ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppRUMBLE.Recording.LCK;
using Il2CppTMPro;
using MelonLoader;
using RockCamDetachedPreviewManager;
using Rock_Cam_Essentials;
using RumbleModdingAPI.RMAPI;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(Main), "RockCamDetachedPreviewManager", "1.1.4", "Deterraleon", null)]
[assembly: MelonGame("Buckethead Entertainment", "RUMBLE")]
[assembly: MelonColor(255, 100, 100, 255)]
[assembly: MelonAuthorColor(255, 195, 119, 255)]
[assembly: VerifyLoaderVersion(0, 6, 6, true)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("RockCamDetachedPreviewManager")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+1182bdc9157ae1f3e0117402e84fe7d5c884d5e6")]
[assembly: AssemblyProduct("RockCamDetachedPreviewManager")]
[assembly: AssemblyTitle("RockCamDetachedPreviewManager")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace RockCamDetachedPreviewManager;

public static class BuildInfo
{
	public const string ModName = "RockCamDetachedPreviewManager";

	public const string ModVersion = "1.1.4";

	public const string Author = "Deterraleon";
}
public class Main : MelonMod
{
	public class DetachedPreview
	{
		public Preview preview;

		public string name;

		public Func<Rock_Cam, bool> Start;

		public Func<Rock_Cam, bool> End;

		public Func<Rock_Cam, bool> Initiate;
	}

	[HarmonyPatch(typeof(LCKTabletDetachedPreview), "SwitchPreview")]
	public static class NameBlupdateOther
	{
		private static void Prefix(LCKTabletDetachedPreview __instance)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			if (Camera == null)
			{
				try
				{
					Camera = new Rock_Cam();
				}
				catch (Exception ex)
				{
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Couldn't initialize rockcam while listening to SP in prefix");
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error((object)ex);
					return;
				}
			}
			if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6 && customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].End != null)
			{
				customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].End(Camera);
			}
		}

		private static void Postfix(LCKTabletDetachedPreview __instance)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			if (Camera == null)
			{
				try
				{
					Camera = new Rock_Cam();
				}
				catch (Exception ex)
				{
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Couldn't initialize rockcam while listening to SP in postfix");
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error((object)ex);
					return;
				}
			}
			((TMP_Text)((Component)((Component)__instance.nextButton).gameObject.transform.FindChild("Value")).GetComponent<TextMeshPro>()).text = names[__instance.ActivePreviewNo];
			if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6 && customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].Start != null)
			{
				customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].Start(Camera);
			}
		}
	}

	[HarmonyPatch(typeof(LCKTabletDetachedPreview), "SwitchToNextPreview")]
	public static class NameBlupdate
	{
		private static void Prefix(LCKTabletDetachedPreview __instance)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			if (Camera == null)
			{
				try
				{
					Camera = new Rock_Cam();
				}
				catch (Exception ex)
				{
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Couldn't initialize rockcam while listening to STNP in prefix");
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error((object)ex);
					return;
				}
			}
			if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6 && customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].End != null)
			{
				customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].End(Camera);
			}
		}

		private static void Postfix(LCKTabletDetachedPreview __instance)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			if (Camera == null)
			{
				try
				{
					Camera = new Rock_Cam();
				}
				catch (Exception ex)
				{
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Couldn't initialize rockcam while listening to STNP in postfix");
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error((object)ex);
					return;
				}
			}
			((TMP_Text)((Component)((Component)__instance.nextButton).gameObject.transform.FindChild("Value")).GetComponent<TextMeshPro>()).text = names[__instance.ActivePreviewNo];
			if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6 && customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].Start != null)
			{
				customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].Start(Camera);
			}
		}
	}

	public static List<string> names = new List<string> { "OFF", "ON Wrist L", "ON Wrist R", "ON HP Bar", "ON View", "ON Monitor" };

	public static List<DetachedPreview> customPreviews = new List<DetachedPreview>();

	private string currentScene = "Loader";

	private bool enabled = true;

	public Il2CppReferenceArray<Preview> previews;

	public static Rock_Cam Camera = null;

	public override void OnSceneWasLoaded(int buildIndex, string sceneName)
	{
		currentScene = sceneName;
	}

	public override void OnLateInitializeMelon()
	{
		Actions.onMapInitialized += mapLoaded;
	}

	public int AddPreview(DetachedPreview preview)
	{
		if (preview == null)
		{
			((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Preview is null during adding preview");
			return -1;
		}
		if (preview.name == null)
		{
			((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Preview.name is null during adding preview");
			return -1;
		}
		((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Adding " + preview.name);
		customPreviews.Add(preview);
		names.Add(preview.name);
		((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Total previews: " + names.Count);
		return names.Count - 1;
	}

	private void InjectPreviews()
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Expected O, but got Unknown
		if (Camera == null)
		{
			try
			{
				Camera = new Rock_Cam();
			}
			catch (Exception)
			{
				((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Couldn't initialize rockcam while injecting");
				return;
			}
		}
		List<Preview> list = ((IEnumerable<Preview>)Camera._DetachedPreviewManager.availablePreviews).ToArray().ToList();
		foreach (DetachedPreview customPreview in customPreviews)
		{
			try
			{
				if (customPreview.Initiate != null)
				{
					customPreview.Initiate(Camera);
				}
				list.Add(customPreview.preview);
				if (customPreview.name != null)
				{
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Injecting " + customPreview.name);
				}
				else
				{
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Preview name is null");
				}
			}
			catch (Exception ex2)
			{
				if (customPreview != null && customPreview.name != null)
				{
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Failed to inject preview " + customPreview.name);
				}
				else
				{
					((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Null preview or null preview name");
				}
				((MelonBase)Melon<Main>.Instance).LoggerInstance.Error((object)ex2);
			}
		}
		Camera._DetachedPreviewManager.availablePreviews = new Il2CppReferenceArray<Preview>(list.ToArray());
		((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Total previews: " + ((Il2CppArrayBase<Preview>)(object)Camera._DetachedPreviewManager.availablePreviews).Length);
	}

	public int ForceInjectPreview(DetachedPreview preview)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Expected O, but got Unknown
		if (Camera == null)
		{
			try
			{
				Camera = new Rock_Cam();
			}
			catch (Exception ex)
			{
				((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Couldn't initialize rockcam while force injecting");
				((MelonBase)Melon<Main>.Instance).LoggerInstance.Error((object)ex);
				return -1;
			}
		}
		if (preview == null)
		{
			((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Preview is null during force injecting");
			return -1;
		}
		if (preview.name == null)
		{
			((MelonBase)Melon<Main>.Instance).LoggerInstance.Error("Preview.name is null during force injecting");
			return -1;
		}
		List<Preview> list = ((IEnumerable<Preview>)Camera._DetachedPreviewManager.availablePreviews).ToArray().ToList();
		if (preview.Initiate != null)
		{
			preview.Initiate(Camera);
		}
		list.Add(preview.preview);
		((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Force injecting " + preview.name);
		Camera._DetachedPreviewManager.availablePreviews = new Il2CppReferenceArray<Preview>(list.ToArray());
		((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Total previews: " + ((Il2CppArrayBase<Preview>)(object)Camera._DetachedPreviewManager.availablePreviews).Length);
		return names.Count - 1;
	}

	public override void OnUpdate()
	{
		if (Camera == null)
		{
			return;
		}
		Camera.POVUpdate();
		Camera.IsShownUpdate();
		if (((ButtonControl)Keyboard.current.eKey).isPressed)
		{
			if (((ButtonControl)Keyboard.current.rKey).wasPressedThisFrame)
			{
				DetachedPreview detachedPreview = new DetachedPreview();
				detachedPreview.preview = ((Il2CppArrayBase<Preview>)(object)Camera._DetachedPreviewManager.availablePreviews)[0];
				detachedPreview.name = "Aboba";
				AddPreview(detachedPreview);
			}
			if (((ButtonControl)Keyboard.current.tKey).wasPressedThisFrame)
			{
				Camera._DetachedPreviewManager.SwitchToNextPreview();
			}
		}
	}

	public void mapLoaded(string currentScene)
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Expected O, but got Unknown
		if (currentScene != "Loader")
		{
			Camera = new Rock_Cam();
			InjectPreviews();
		}
	}
}