Decompiled source of RockCamDetachedPreviewManager v1.0.0

Mods/RockCamDetachedPreviewManager.dll

Decompiled 10 hours 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.0.0", "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")]
[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.0.0";

	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)
		{
			if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6)
			{
				customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].End(Camera);
			}
		}

		private static void Postfix(LCKTabletDetachedPreview __instance)
		{
			((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(Camera);
			}
		}
	}

	[HarmonyPatch(typeof(LCKTabletDetachedPreview), "SwitchToNextPreview")]
	public static class NameBlupdate
	{
		private static void Prefix(LCKTabletDetachedPreview __instance)
		{
			if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6)
			{
				customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].End(Camera);
			}
		}

		private static void Postfix(LCKTabletDetachedPreview __instance)
		{
			((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(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;

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

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

	public int AddPreview(DetachedPreview preview)
	{
		((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()
	{
		List<Preview> list = ((IEnumerable<Preview>)Camera._DetachedPreviewManager.availablePreviews).ToArray().ToList();
		foreach (DetachedPreview customPreview in customPreviews)
		{
			customPreview.Initiate(Camera);
			list.Add(customPreview.preview);
			((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Injecting " + customPreview.name);
		}
		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)
	{
		List<Preview> list = ((IEnumerable<Preview>)Camera._DetachedPreviewManager.availablePreviews).ToArray().ToList();
		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 (((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();
		}
	}
}