Decompiled source of CustomGravitySetting v1.0.0

GravityControl.dll

Decompiled 4 days ago
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Localization.Components;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("GravityControl")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("GravityControl")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("5112b8c7-e2ca-445a-ae0f-80eb05284f9b")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace CustomGravitySetting;

[BepInPlugin("com.morsecodeguy.gravitycontrol", "Gravity Control", "1.0.0")]
public class CustomGravitySettingPlugin : BaseUnityPlugin
{
	public static ManualLogSource Log;

	public static float[] GravityMultipliers = new float[100];

	public static int CurrentIndex = 19;

	public static Vector3 OriginalGravity;

	public static float CurrentMultiplier => GravityMultipliers[CurrentIndex];

	private void Awake()
	{
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		Log = ((BaseUnityPlugin)this).Logger;
		for (int i = 0; i < GravityMultipliers.Length; i++)
		{
			GravityMultipliers[i] = 0.05f * (float)(i + 1);
		}
		OriginalGravity = Physics.gravity;
		Harmony val = new Harmony("com.morsecodeguy.customgravity");
		val.PatchAll();
	}

	public static void IncreaseMultiplier()
	{
		if (CurrentIndex < GravityMultipliers.Length - 1)
		{
			CurrentIndex++;
			ApplyGravity();
		}
	}

	public static void DecreaseMultiplier()
	{
		if (CurrentIndex > 0)
		{
			CurrentIndex--;
			ApplyGravity();
		}
	}

	public static bool TrySetMultiplier(string input)
	{
		input = input.Replace("x", "").Trim();
		if (float.TryParse(input, out var result))
		{
			int currentIndex = 0;
			float num = Mathf.Abs(result - GravityMultipliers[0]);
			for (int i = 1; i < GravityMultipliers.Length; i++)
			{
				float num2 = Mathf.Abs(result - GravityMultipliers[i]);
				if (num2 < num)
				{
					num = num2;
					currentIndex = i;
				}
			}
			CurrentIndex = currentIndex;
			ApplyGravity();
			return true;
		}
		return false;
	}

	public static void ApplyGravity()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		Physics.gravity = new Vector3(0f, OriginalGravity.y * CurrentMultiplier, 0f);
		Log.LogInfo((object)$"[CustomGravitySetting] Gravity set to: {Physics.gravity}");
	}
}
[HarmonyPatch(typeof(GameSettingsPanel), "Start")]
public static class GameSettingsPanel_Start_Patch
{
	private static void Postfix(GameSettingsPanel __instance)
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0215: Unknown result type (might be due to invalid IL or missing references)
		//IL_021f: Expected O, but got Unknown
		//IL_022e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0238: Expected O, but got Unknown
		if ((Object)(object)__instance == (Object)null)
		{
			return;
		}
		Scene activeScene = SceneManager.GetActiveScene();
		string name = ((Scene)(ref activeScene)).name;
		if (name == "MainMenu" || name == "MenuMultiplayerSteam")
		{
			CustomGravitySettingPlugin.CurrentIndex = 19;
			CustomGravitySettingPlugin.ApplyGravity();
		}
		Transform val = ((Component)__instance).transform.Find("MoveSetsPanel/Scroll View/Viewport/Content/TimeScaleMinSettingButtonOptionPanel");
		if ((Object)(object)val == (Object)null)
		{
			Debug.LogError((object)"[CustomGravitySetting] Template panel not found!");
			return;
		}
		Transform val2 = Object.Instantiate<Transform>(val, val.parent);
		((Object)val2).name = "GravitySettingButtonOptionPanel";
		val2.SetSiblingIndex(val.GetSiblingIndex() + 1);
		ButtonOptionSelect component = ((Component)val2).GetComponent<ButtonOptionSelect>();
		if ((Object)(object)component != (Object)null)
		{
			Object.Destroy((Object)(object)component);
		}
		Transform val3 = val2.Find("Text (Legacy)");
		if ((Object)(object)val3 != (Object)null)
		{
			Text component2 = ((Component)val3).GetComponent<Text>();
			if ((Object)(object)component2 != (Object)null)
			{
				component2.text = "Gravity Scale";
			}
			LocalizeStringEvent component3 = ((Component)val3).GetComponent<LocalizeStringEvent>();
			if ((Object)(object)component3 != (Object)null)
			{
				Object.Destroy((Object)(object)component3);
			}
		}
		Transform obj = val2.Find("NextButton");
		Button val4 = ((obj != null) ? ((Component)obj).GetComponent<Button>() : null);
		Transform obj2 = val2.Find("PreviousButton");
		Button val5 = ((obj2 != null) ? ((Component)obj2).GetComponent<Button>() : null);
		Transform obj3 = val2.Find("InputField (Legacy)");
		InputField inputField = ((obj3 != null) ? ((Component)obj3).GetComponent<InputField>() : null);
		if ((Object)(object)val4 == (Object)null || (Object)(object)val5 == (Object)null || (Object)(object)inputField == (Object)null)
		{
			Debug.LogError((object)"[CustomGravitySetting] Missing one or more UI components in gravity panel.");
			return;
		}
		((UnityEventBase)val4.onClick).RemoveAllListeners();
		((UnityEventBase)val5.onClick).RemoveAllListeners();
		((UnityEventBase)inputField.onEndEdit).RemoveAllListeners();
		inputField.text = $"{CustomGravitySettingPlugin.CurrentMultiplier:0.00}x";
		((UnityEvent)val5.onClick).AddListener((UnityAction)delegate
		{
			CustomGravitySettingPlugin.DecreaseMultiplier();
			inputField.text = $"{CustomGravitySettingPlugin.CurrentMultiplier:0.00}x";
		});
		((UnityEvent)val4.onClick).AddListener((UnityAction)delegate
		{
			CustomGravitySettingPlugin.IncreaseMultiplier();
			inputField.text = $"{CustomGravitySettingPlugin.CurrentMultiplier:0.00}x";
		});
		((UnityEvent<string>)(object)inputField.onEndEdit).AddListener((UnityAction<string>)delegate(string input)
		{
			if (CustomGravitySettingPlugin.TrySetMultiplier(input))
			{
				inputField.text = $"{CustomGravitySettingPlugin.CurrentMultiplier:0.00}x";
			}
			else
			{
				inputField.text = $"{CustomGravitySettingPlugin.CurrentMultiplier:0.00}x";
			}
		});
	}
}