Mods\Flip.dll

Decompiled 18 hours ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BoneLib;
using BoneLib.BoneMenu;
using Flip;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSLZ.Marrow;
using MelonLoader;
using MelonLoader.Preferences;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(FlipMod), "Flip", "1.0.0", "Spoon1606", null)]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace Flip;

public class FlipMod : MelonMod
{
	private static MelonPreferences_Category _prefCategory;

	private static MelonPreferences_Entry<bool> _prefEnabled;

	private static MelonPreferences_Entry<float> _prefStrength;

	private static BoolElement _enabledElement;

	private static float _inputDeadzone = 0.3f;

	private static float _groundCheckDistance = 1.2f;

	public static bool IsEnabled { get; private set; } = true;


	public static float Strength { get; private set; } = 20f;


	public override void OnInitializeMelon()
	{
		SetupPreferences();
		SetupBoneMenu();
	}

	private void SetupPreferences()
	{
		_prefCategory = MelonPreferences.CreateCategory("Flip");
		_prefEnabled = _prefCategory.CreateEntry<bool>("IsEnabled", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		_prefStrength = _prefCategory.CreateEntry<float>("Strength", 20f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		IsEnabled = _prefEnabled.Value;
		Strength = _prefStrength.Value;
	}

	private void SetupBoneMenu()
	{
		//IL_000a: 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_0041: Unknown result type (might be due to invalid IL or missing references)
		Page obj = Page.Root.CreatePage("Flip", Color.white, 0, true);
		_enabledElement = obj.CreateBool("Enabled", Color.green, IsEnabled, (Action<bool>)OnSetEnabled);
		obj.CreateFloat("Strength", Color.blue, Strength, 1f, 1f, 100f, (Action<float>)OnSetStrength);
	}

	private static void OnSetEnabled(bool value)
	{
		IsEnabled = value;
		_prefEnabled.Value = value;
		_prefCategory.SaveToFile(false);
	}

	private static void OnSetStrength(float value)
	{
		Strength = value;
		_prefStrength.Value = value;
		_prefCategory.SaveToFile(false);
	}

	public override void OnPreferencesLoaded()
	{
		if (_prefCategory != null)
		{
			IsEnabled = _prefEnabled.Value;
			Strength = _prefStrength.Value;
			if (_enabledElement != null)
			{
				_enabledElement.Value = IsEnabled;
			}
		}
	}

	public override void OnUpdate()
	{
		//IL_0081: 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_00d1: 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_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_011f: Unknown result type (might be due to invalid IL or missing references)
		if (!IsEnabled)
		{
			return;
		}
		RigManager rigManager = Player.RigManager;
		if ((Object)(object)rigManager == (Object)null)
		{
			return;
		}
		PhysicsRig physicsRig = rigManager.physicsRig;
		if ((Object)(object)physicsRig == (Object)null || (!physicsRig.torso.shutdown && physicsRig.ballLocoEnabled))
		{
			return;
		}
		Transform transform = ((Component)((Rig)physicsRig).m_pelvis).transform;
		Rigidbody component = ((Component)transform).GetComponent<Rigidbody>();
		if ((Object)(object)component == (Object)null)
		{
			return;
		}
		component.maxAngularVelocity = 200f;
		BaseController leftController = Player.LeftController;
		if ((Object)(object)leftController == (Object)null)
		{
			return;
		}
		float y = leftController.GetThumbStickAxis().y;
		if (Mathf.Abs(y) <= _inputDeadzone)
		{
			return;
		}
		bool num = !Physics.Raycast(transform.position, Vector3.down, _groundCheckDistance);
		float num2 = y * Strength * 50f;
		if (num)
		{
			num2 *= 3f;
		}
		Vector3 val = transform.right * num2;
		component.AddTorque(val, (ForceMode)2);
		Rigidbody[] array = Il2CppArrayBase<Rigidbody>.op_Implicit(((Component)transform).GetComponentsInChildren<Rigidbody>());
		if (array == null)
		{
			return;
		}
		Rigidbody[] array2 = array;
		foreach (Rigidbody val2 in array2)
		{
			if ((Object)(object)val2 != (Object)null && (Object)(object)val2 != (Object)(object)component)
			{
				val2.AddTorque(val, (ForceMode)2);
			}
		}
	}
}