Decompiled source of UltraGravity v1.0.3

UltraGravity.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using Gravity;
using PluginConfig.API;
using PluginConfig.API.Decorators;
using PluginConfig.API.Fields;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("UltraGravity")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UltraGravity")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("d24676a8-4da0-4d43-a77a-48484b461e2c")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace UltraGravity;

public static class F_Utils
{
	[CompilerGenerated]
	private sealed class <DelayCoroutine>d__0 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public float delayInSeconds;

		public Action action;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <DelayCoroutine>d__0(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				<>2__current = (object)new WaitForSeconds(delayInSeconds);
				<>1__state = 1;
				return true;
			case 1:
				<>1__state = -1;
				action();
				return false;
			}
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	[CompilerGenerated]
	private sealed class <NextFrameCoroutine>d__1 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public Action action;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <NextFrameCoroutine>d__1(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				<>2__current = (object)new WaitForEndOfFrame();
				<>1__state = 1;
				return true;
			case 1:
				<>1__state = -1;
				action();
				return false;
			}
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	[IteratorStateMachine(typeof(<DelayCoroutine>d__0))]
	public static IEnumerator DelayCoroutine(float delayInSeconds, Action action)
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <DelayCoroutine>d__0(0)
		{
			delayInSeconds = delayInSeconds,
			action = action
		};
	}

	[IteratorStateMachine(typeof(<NextFrameCoroutine>d__1))]
	public static IEnumerator NextFrameCoroutine(Action action)
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <NextFrameCoroutine>d__1(0)
		{
			action = action
		};
	}

	public static bool Try_GetFrom_Config(BoolField boolField, bool regular = false)
	{
		try
		{
			if (boolField != null)
			{
				return boolField.value;
			}
		}
		catch
		{
		}
		return regular;
	}

	public static float Try_GetFrom_Config(IntField intField, int regular = 1)
	{
		try
		{
			if (intField != null)
			{
				return intField.value;
			}
		}
		catch
		{
		}
		return regular;
	}

	public static float Try_GetFrom_Config(FloatField floatField, float regular = 1f)
	{
		try
		{
			if (floatField != null)
			{
				return floatField.value;
			}
		}
		catch
		{
		}
		return regular;
	}

	public static KeyCode Try_GetFrom_Config(KeyCodeField keyCodeField, KeyCode regular = 0)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		try
		{
			if (keyCodeField != null)
			{
				return keyCodeField.value;
			}
		}
		catch
		{
		}
		return regular;
	}

	public static T Try_GetFrom_Config<T>(EnumField<T> enumField, T regular) where T : struct
	{
		try
		{
			if (enumField != null)
			{
				return enumField.value;
			}
		}
		catch
		{
		}
		return regular;
	}
}
public static class UltraGravity_Settings
{
	public enum GravityVector
	{
		Up,
		Down,
		Left,
		Right,
		Forward,
		Back,
		Random
	}

	public static Dictionary<GravityVector, Vector3> RotationKeys = new Dictionary<GravityVector, Vector3>
	{
		[GravityVector.Up] = Vector3.up,
		[GravityVector.Down] = Vector3.down,
		[GravityVector.Left] = Vector3.left,
		[GravityVector.Right] = Vector3.right,
		[GravityVector.Forward] = Vector3.forward,
		[GravityVector.Back] = Vector3.back,
		[GravityVector.Random] = Vector3.zero
	};

	public static BoolField V__Varb_Mod_Enabled;

	public static EnumField<GravityVector> V__Varb_Default_Gravity;

	public static BoolField V__Varb_Rotate_OnCollision;

	public static BoolField V__Varb_Rotate_Inverted;

	public static BoolField V__Varb_AnyLayer_CollisionTrigger;

	public static EnumField<LMD> V__Varb_SpecificCollision_LayerTrigger;

	public static FloatField V__Varb_Delay_AfterCollision;

	public static BoolField V__Varb_Rotate_OnBind;

	public static KeyCodeField K__Key_Return_DefaultGravity;

	public static KeyCodeField K__Key_ChangeGravity_AtLook;

	public static bool Mod_Enabled => F_Utils.Try_GetFrom_Config(V__Varb_Mod_Enabled, regular: true);

	public static GravityVector Default_Gravity => F_Utils.Try_GetFrom_Config(V__Varb_Default_Gravity, GravityVector.Down);

	public static bool Rotate_OnCollision => F_Utils.Try_GetFrom_Config(V__Varb_Rotate_OnCollision, regular: true);

	public static bool Rotate_Inverted => F_Utils.Try_GetFrom_Config(V__Varb_Rotate_Inverted);

	public static bool AnyLayer_CollisionTrigger => F_Utils.Try_GetFrom_Config(V__Varb_AnyLayer_CollisionTrigger, regular: true);

	public static LMD SpecificLayer_CollisionTrigger => F_Utils.Try_GetFrom_Config<LMD>(V__Varb_SpecificCollision_LayerTrigger, (LMD)6);

	public static float Delay_AfterCollision => F_Utils.Try_GetFrom_Config(V__Varb_Delay_AfterCollision, 0.05f);

	public static bool Rotate_OnBind => F_Utils.Try_GetFrom_Config(V__Varb_Rotate_OnBind, regular: true);

	public static KeyCode K_Return_DefaultGravity => F_Utils.Try_GetFrom_Config(K__Key_Return_DefaultGravity, (KeyCode)116);

	public static KeyCode K_Change_AtLookGravity => F_Utils.Try_GetFrom_Config(K__Key_ChangeGravity_AtLook, (KeyCode)103);

	public static Vector3 GetDefaultRotation()
	{
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		if (Default_Gravity == GravityVector.Random)
		{
			Vector3[] array = (Vector3[])(object)new Vector3[6]
			{
				Vector3.up,
				Vector3.down,
				Vector3.left,
				Vector3.right,
				Vector3.forward,
				Vector3.back
			};
			return array[Random.Range(0, array.Length)];
		}
		return RotationKeys[Default_Gravity];
	}
}
[BepInPlugin("com.enragedone.ultragravity", "UltraGravity", "1.0.3")]
public class UltraGravity_Loader : BaseUnityPlugin
{
	public const string GUID = "com.enragedone.ultragravity";

	public const string Name = "UltraGravity";

	public const string Version = "1.0.3";

	public const string Set_Guid = "com.enragedone.ultragravity.settings";

	public PluginConfigurator config;

	public bool Confing_Loaded;

	public static ManualLogSource _Logger;

	public static UltraGravity_Loader _Instance;

	public void Awake()
	{
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Expected O, but got Unknown
		//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_0136: Unknown result type (might be due to invalid IL or missing references)
		//IL_0140: Expected O, but got Unknown
		//IL_0157: Unknown result type (might be due to invalid IL or missing references)
		//IL_0161: Expected O, but got Unknown
		//IL_0178: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Expected O, but got Unknown
		//IL_0194: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d8: Expected O, but got Unknown
		//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f8: Expected O, but got Unknown
		//IL_020e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0218: Expected O, but got Unknown
		//IL_0252: Unknown result type (might be due to invalid IL or missing references)
		//IL_025c: Expected O, but got Unknown
		_Instance = this;
		_Logger = ((BaseUnityPlugin)this).Logger;
		_Logger.LogInfo((object)"UltraGravity_Loader v1.0.3 has started.");
		try
		{
			config = PluginConfigurator.Create("UltraGravity", "com.enragedone.ultragravity.settings");
			string text = Path.Combine(Path.GetDirectoryName(typeof(UltraGravity_Loader).Assembly.Location), "icon.png");
			config.SetIconWithURL("file://" + text);
			new ConfigHeader(config.rootPanel, "Main / Global Settings", 24).textColor = Color32.op_Implicit(new Color32((byte)105, (byte)172, byte.MaxValue, byte.MaxValue));
			UltraGravity_Settings.V__Varb_Mod_Enabled = new BoolField(config.rootPanel, "Mod Enabled", "com.enragedone.ultragravity.settings.V__Varb_Mod_Enabled", true);
			UltraGravity_Settings.V__Varb_Default_Gravity = new EnumField<UltraGravity_Settings.GravityVector>(config.rootPanel, "Default Gravity", "com.enragedone.ultragravity.settings.V__Varb_Default_Gravity", UltraGravity_Settings.GravityVector.Down);
			new ConfigHeader(config.rootPanel, "Bind Settings", 24).textColor = Color32.op_Implicit(new Color32((byte)140, (byte)185, byte.MaxValue, byte.MaxValue));
			UltraGravity_Settings.V__Varb_Rotate_OnBind = new BoolField(config.rootPanel, "Rotate On Binds", "com.enragedone.ultragravity.settings.V__Varb_Rotate_OnBind", true);
			UltraGravity_Settings.K__Key_Return_DefaultGravity = new KeyCodeField(config.rootPanel, "Return Default Gravity", "com.enragedone.ultragravity.settings.K__Key_Return_DefaultGravity", (KeyCode)116);
			UltraGravity_Settings.K__Key_ChangeGravity_AtLook = new KeyCodeField(config.rootPanel, "Change Gravity At Look", "com.enragedone.ultragravity.settings.K__Key_ChangeGravity_AtLook", (KeyCode)103);
			new ConfigHeader(config.rootPanel, "Collision Settings", 24).textColor = Color32.op_Implicit(new Color32((byte)0, (byte)200, byte.MaxValue, byte.MaxValue));
			UltraGravity_Settings.V__Varb_Rotate_OnCollision = new BoolField(config.rootPanel, "Rotate On Collision", "com.enragedone.ultragravity.settings.V__Varb_Rotate_OnCollision", true);
			UltraGravity_Settings.V__Varb_Rotate_Inverted = new BoolField(config.rootPanel, "Reverse Rotation", "com.enragedone.ultragravity.settings.V__Varb_Rotate_Inverted", false);
			UltraGravity_Settings.V__Varb_AnyLayer_CollisionTrigger = new BoolField(config.rootPanel, "Any Collision Layer Triggers Rotation", "com.enragedone.ultragravity.settings.V__Varb_AnyLayer_CollisionTrigger", true);
			UltraGravity_Settings.V__Varb_SpecificCollision_LayerTrigger = new EnumField<LMD>(config.rootPanel, "Specific Collision Layer Trigger", "com.enragedone.ultragravity.settings.V__Varb_SpecificCollision_LayerTrigger", (LMD)6);
			UltraGravity_Settings.V__Varb_Delay_AfterCollision = new FloatField(config.rootPanel, "Delay After Collision", "com.enragedone.ultragravity.settings.V__Varb_Delay_AfterCollision", 0.05f);
			_Logger.LogInfo((object)"Config v1.0.3 loaded successfully");
			Confing_Loaded = true;
		}
		catch
		{
			_Logger.LogError((object)"UltraGravity_Loader v1.0.3 !!!---!!! ERROR With PluginConfigurator Init");
		}
		UltraGravity_Core.Boot_Core();
		_Logger.LogInfo((object)"UltraGravity_Loader v1.0.3 loaded successfully without error.");
	}
}
public static class UltraGravity_Core
{
	public class Waiter : MonoBehaviour
	{
		public void FixedUpdate()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			if (MonoSingleton<NewMovement>.Instance.activated)
			{
				((Component)PlayerRotator.GravityVolume).transform.rotation = Quaternion.FromToRotation(UltraGravity_Settings.GetDefaultRotation(), Vector3.down);
				MonoSingleton<NewMovement>.Instance.SwitchGravity(PlayerRotator.GravityVolume.GravityVector, false, true);
				Object.Destroy((Object)(object)this);
			}
		}
	}

	public class PlayerRotator : MonoBehaviour
	{
		public static GravityVolume GravityVolume;

		public float Waiter;

		public bool Pressed;

		public void Start()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Expected O, but got Unknown
			GravityVolume = GameObjectExtensions.GetOrAddComponent<GravityVolume>(new GameObject("Custom PlayerRotator GravityVolume"));
			MonoSingleton<NewMovement>.Instance.gravityVolumes.Add(GravityVolume);
		}

		public void Update()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: 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_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			if (!UltraGravity_Settings.Mod_Enabled)
			{
				return;
			}
			Waiter = Mathf.MoveTowards(Waiter, 0f, Time.deltaTime);
			if (!UltraGravity_Settings.Rotate_OnBind)
			{
				return;
			}
			if (UnityInput.Current.GetKeyDown(UltraGravity_Settings.K_Return_DefaultGravity))
			{
				if (!Pressed)
				{
					((Component)GravityVolume).transform.rotation = Quaternion.FromToRotation(UltraGravity_Settings.GetDefaultRotation(), Vector3.down);
					MonoSingleton<NewMovement>.Instance.SwitchGravity(GravityVolume.GravityVector, false, true);
				}
				Pressed = true;
			}
			else if (UnityInput.Current.GetKeyDown(UltraGravity_Settings.K_Change_AtLookGravity))
			{
				if (!Pressed)
				{
					Transform transform = ((Component)MonoSingleton<CameraController>.Instance).transform;
					Vector3 val = transform.forward;
					Vector3 val2 = -((Vector3)(ref val)).normalized;
					val = Vector3.Cross(transform.right, val2);
					Vector3 normalized = ((Vector3)(ref val)).normalized;
					((Component)GravityVolume).transform.rotation = Quaternion.LookRotation(normalized, val2);
					MonoSingleton<NewMovement>.Instance.SwitchGravity(GravityVolume.GravityVector, false, false);
				}
				Pressed = true;
			}
			else
			{
				Pressed = false;
			}
		}

		public void OnCollisionEnter(Collision collision)
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: 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_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			if (!UltraGravity_Settings.Mod_Enabled || !UltraGravity_Settings.Rotate_OnCollision || Waiter != 0f)
			{
				return;
			}
			ContactPoint contact;
			if (!UltraGravity_Settings.AnyLayer_CollisionTrigger)
			{
				contact = collision.GetContact(0);
				if (!LayerMaskDefaults.IsMatchingLayer(((Component)((ContactPoint)(ref contact)).thisCollider).gameObject.layer, UltraGravity_Settings.SpecificLayer_CollisionTrigger))
				{
					return;
				}
			}
			Waiter = UltraGravity_Settings.Delay_AfterCollision;
			contact = collision.GetContact(0);
			Vector3 val = ((ContactPoint)(ref contact)).normal;
			if (UltraGravity_Settings.Rotate_Inverted)
			{
				val *= -1f;
			}
			((Component)GravityVolume).transform.rotation = Quaternion.FromToRotation(((Component)this).transform.up, val) * ((Component)GravityVolume).transform.rotation;
			MonoSingleton<NewMovement>.Instance.SwitchGravity(GravityVolume.GravityVector, false, true);
		}
	}

	public static void Boot_Core()
	{
		SceneManager.sceneLoaded += OnSceneLoaded;
	}

	public static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
	{
		string currentScene = SceneHelper.CurrentScene;
		if (currentScene != "Main Menu" && currentScene != "Intro" && currentScene != "Bootstrap")
		{
			ComponentExtensions.GetOrAddComponent<PlayerRotator>((Component)(object)MonoSingleton<NewMovement>.Instance);
			if (UltraGravity_Settings.Mod_Enabled)
			{
				ComponentExtensions.GetOrAddComponent<Waiter>((Component)(object)MonoSingleton<NewMovement>.Instance);
			}
		}
	}
}