Decompiled source of UltraGravity v1.0.6

UltraGravity.dll

Decompiled a month 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.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[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_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: 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_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: 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_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: 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_0020: 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 FloatField V__Varb_Gravity_Power_Mult;

	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 KeyCodeField K__Key_Invert_Gravity;

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

	public static float Gravity_Power_Mult => F_Utils.Try_GetFrom_Config(V__Varb_Gravity_Power_Mult);

	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 KeyCode K_Invert_Gravity => F_Utils.Try_GetFrom_Config(K__Key_Invert_Gravity, (KeyCode)121);

	public static Vector3 GetDefaultRotation()
	{
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//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_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: 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_003f: 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_004b: 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)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: 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];
	}

	public static Vector3 GetDefaultRotation(GravityVector Default_Gravity)
	{
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: 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_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: 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)
		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.6")]
public class UltraGravity_Loader : BaseUnityPlugin
{
	public const string GUID = "com.enragedone.ultragravity";

	public const string Name = "UltraGravity";

	public const string Version = "1.0.6";

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

	public PluginConfigurator config;

	public bool Confing_Loaded = false;

	public static ManualLogSource _Logger;

	public static UltraGravity_Loader _Instance;

	public void Awake()
	{
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: Expected O, but got Unknown
		//IL_0107: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Expected O, but got Unknown
		//IL_011d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0127: Expected O, but got Unknown
		//IL_014b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0155: Expected O, but got Unknown
		//IL_0168: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_0186: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b1: Expected O, but got Unknown
		//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d2: Expected O, but got Unknown
		//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f3: Expected O, but got Unknown
		//IL_020a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0214: Expected O, but got Unknown
		//IL_0226: Unknown result type (might be due to invalid IL or missing references)
		//IL_023b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0240: Unknown result type (might be due to invalid IL or missing references)
		//IL_0261: Unknown result type (might be due to invalid IL or missing references)
		//IL_026b: Expected O, but got Unknown
		//IL_0281: Unknown result type (might be due to invalid IL or missing references)
		//IL_028b: Expected O, but got Unknown
		//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ab: Expected O, but got Unknown
		//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ef: Expected O, but got Unknown
		_Instance = this;
		_Logger = ((BaseUnityPlugin)this).Logger;
		_Logger.LogInfo((object)"UltraGravity_Loader v1.0.6 has started.");
		try
		{
			config = PluginConfigurator.Create("UltraGravity", "com.enragedone.ultragravity.settings");
			string directoryName = Path.GetDirectoryName(typeof(UltraGravity_Loader).Assembly.Location);
			string text = Path.Combine(directoryName, "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);
			UltraGravity_Settings.V__Varb_Gravity_Power_Mult = new FloatField(config.rootPanel, "Gravity Power Mult", "com.enragedone.ultragravity.settings.V__Varb_Gravity_Power_Mult", 1f);
			UltraGravity_Settings.V__Varb_Mod_Enabled.onValueChange += new BoolValueChangeEventDelegate(V__Varb_Mod_Enabled_onValueChange);
			UltraGravity_Settings.V__Varb_Default_Gravity.onValueChange += V__Varb_Default_Gravity_onValueChange;
			UltraGravity_Settings.V__Varb_Gravity_Power_Mult.onValueChange += new FloatValueChangeEventDelegate(V__Varb_Gravity_Power_Mult_onValueChange);
			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);
			UltraGravity_Settings.K__Key_Invert_Gravity = new KeyCodeField(config.rootPanel, "Invert Gravity", "com.enragedone.ultragravity.settings.K__Key_Invert_Gravity", (KeyCode)121);
			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.6 loaded successfully");
			Confing_Loaded = true;
		}
		catch
		{
			_Logger.LogError((object)"UltraGravity_Loader v1.0.6 !!!---!!! ERROR With PluginConfigurator Init");
		}
		UltraGravity_Core.Boot_Core();
		_Logger.LogInfo((object)"UltraGravity_Loader v1.0.6 loaded successfully without error.");
	}

	private void V__Varb_Mod_Enabled_onValueChange(BoolValueChangeEvent data)
	{
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: 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_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		if (MonoSingleton<NewMovement>.Instance.activated)
		{
			if (data.value)
			{
				((Component)UltraGravity_Core.PlayerRotator.GravityVolume).transform.rotation = Quaternion.FromToRotation(UltraGravity_Settings.GetDefaultRotation(), Vector3.up);
				MonoSingleton<NewMovement>.Instance.SwitchGravity(UltraGravity_Core.PlayerRotator.GravityVolume.GravityVector * UltraGravity_Settings.Gravity_Power_Mult, false, true);
			}
			else
			{
				MonoSingleton<NewMovement>.Instance.SwitchGravity(Physics.gravity, false, false);
			}
		}
	}

	private void V__Varb_Default_Gravity_onValueChange(EnumValueChangeEvent<UltraGravity_Settings.GravityVector> data)
	{
		//IL_002f: 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_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		if (MonoSingleton<NewMovement>.Instance.activated && UltraGravity_Settings.Mod_Enabled)
		{
			((Component)UltraGravity_Core.PlayerRotator.GravityVolume).transform.rotation = Quaternion.FromToRotation(UltraGravity_Settings.GetDefaultRotation(data.value), Vector3.up);
			MonoSingleton<NewMovement>.Instance.SwitchGravity(UltraGravity_Core.PlayerRotator.GravityVolume.GravityVector * UltraGravity_Settings.Gravity_Power_Mult, false, true);
		}
	}

	private void V__Varb_Gravity_Power_Mult_onValueChange(FloatValueChangeEvent data)
	{
		//IL_0029: 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 && UltraGravity_Settings.Mod_Enabled)
		{
			MonoSingleton<NewMovement>.Instance.SwitchGravity(UltraGravity_Core.PlayerRotator.GravityVolume.GravityVector * data.value, false, false);
		}
	}
}
public static class UltraGravity_Core
{
	public class Waiter : MonoBehaviour
	{
		public void FixedUpdate()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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_0043: 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.up);
				MonoSingleton<NewMovement>.Instance.SwitchGravity(PlayerRotator.GravityVolume.GravityVector * UltraGravity_Settings.Gravity_Power_Mult, false, true);
				Object.Destroy((Object)(object)this);
			}
		}
	}

	public class PlayerRotator : MonoBehaviour
	{
		public static GravityVolume GravityVolume;

		public float Waiter = 0f;

		public bool Pressed = false;

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

		public void Update()
		{
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//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_01b3: 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.up);
					MonoSingleton<NewMovement>.Instance.SwitchGravity(GravityVolume.GravityVector * UltraGravity_Settings.Gravity_Power_Mult, 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 * UltraGravity_Settings.Gravity_Power_Mult, false, false);
				}
				Pressed = true;
			}
			else if (UnityInput.Current.GetKeyDown(UltraGravity_Settings.K_Invert_Gravity))
			{
				if (!Pressed)
				{
					((Component)GravityVolume).transform.up = -((Component)GravityVolume).transform.up;
					MonoSingleton<NewMovement>.Instance.SwitchGravity(GravityVolume.GravityVector * UltraGravity_Settings.Gravity_Power_Mult, false, false);
				}
				Pressed = true;
			}
			else
			{
				Pressed = false;
			}
		}

		public void OnCollisionEnter(Collision collision)
		{
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: 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_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: 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_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: 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)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: 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);
			}
		}
	}
}