Decompiled source of UpsideDownMod v1.0.1

UpsideDownMod.dll

Decompiled a month ago
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using KinematicCharacterController;
using RoR2;
using UnityEngine;
using UnityEngine.AddressableAssets;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("UpsideDownMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("UpsideDownMod")]
[assembly: AssemblyTitle("UpsideDownMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace UpsideDownMod;

internal class FlipBehaviour : MonoBehaviour
{
	private CharacterBody target;

	private Camera camera;

	private CameraRigController cameraRig;

	private CharacterMotor motor;

	public float speed = 65f;

	private void Awake()
	{
		camera = ((Component)this).GetComponent<Camera>();
		cameraRig = ((Component)this).GetComponentInParent<CameraRigController>();
	}

	private void Unground()
	{
		//IL_0011: 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_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		Vector3 velocity = cameraRig.targetBody.characterMotor.velocity;
		velocity.y = speed;
		cameraRig.targetBody.characterMotor.velocity = velocity;
		((BaseCharacterController)cameraRig.targetBody.characterMotor).Motor.ForceUnground(0.1f);
	}

	private void FixedUpdate()
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: 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_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0131: 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_014d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0159: Unknown result type (might be due to invalid IL or missing references)
		//IL_0160: Unknown result type (might be due to invalid IL or missing references)
		if (Object.op_Implicit((Object)(object)motor) && (motor.isGrounded || motor.velocity == Vector3.zero))
		{
			Unground();
		}
		if (Object.op_Implicit((Object)(object)target) || !Object.op_Implicit((Object)(object)cameraRig) || !Object.op_Implicit((Object)(object)cameraRig.targetBody))
		{
			return;
		}
		target = cameraRig.targetBody;
		if (MainPlugin.flipPlayer.Value)
		{
			Vector3 localScale = cameraRig.targetBody.transform.localScale;
			cameraRig.targetBody.transform.localScale = new Vector3(localScale.x, -1f, localScale.z);
			if (Object.op_Implicit((Object)(object)cameraRig.targetBody.modelLocator) && Object.op_Implicit((Object)(object)cameraRig.targetBody.modelLocator.modelTransform))
			{
				Vector3 localScale2 = cameraRig.targetBody.modelLocator.modelTransform.localScale;
				cameraRig.targetBody.modelLocator.modelTransform.localScale = new Vector3(localScale2.x, -1f, localScale2.z);
			}
		}
		if (MainPlugin.flippedGravity.Value && Object.op_Implicit((Object)(object)cameraRig.targetBody.characterMotor))
		{
			motor = cameraRig.targetBody.characterMotor;
			CharacterGravityParameters gravityParameters = motor.gravityParameters;
			gravityParameters.channeledAntiGravityGranterCount++;
			motor.gravityParameters = gravityParameters;
			Unground();
		}
	}

	private void OnPreCull()
	{
		//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_0044: 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_006f: Unknown result type (might be due to invalid IL or missing references)
		float num = ((!MainPlugin.axisX.Value) ? 1 : (-1));
		float num2 = ((!MainPlugin.axisY.Value) ? 1 : (-1));
		float num3 = ((!MainPlugin.axisZ.Value) ? 1 : (-1));
		Matrix4x4 val = Matrix4x4.Scale(new Vector3(num, num2, num3));
		camera.ResetWorldToCameraMatrix();
		camera.ResetProjectionMatrix();
		camera.projectionMatrix *= val;
	}

	private void OnPreRender()
	{
		GL.invertCulling = true;
	}

	private void OnPostRender()
	{
		GL.invertCulling = false;
	}
}
[BepInPlugin("com.Dragonyck.UpsideDownMod", "UpsideDownMod", "1.0.0")]
public class MainPlugin : BaseUnityPlugin
{
	public const string MODUID = "com.Dragonyck.UpsideDownMod";

	public const string MODNAME = "UpsideDownMod";

	public const string VERSION = "1.0.0";

	internal static ConfigEntry<bool> flipPlayer;

	internal static ConfigEntry<bool> flippedGravity;

	internal static ConfigEntry<bool> axisX;

	internal static ConfigEntry<bool> axisY;

	internal static ConfigEntry<bool> axisZ;

	private void Awake()
	{
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		flipPlayer = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Flip Player", false, (ConfigDescription)null);
		flippedGravity = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Flipped Gravity", false, (ConfigDescription)null);
		axisX = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Flip Sides", false, "Very buggy, experimental.");
		axisY = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Flip Up", true, (ConfigDescription)null);
		axisZ = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Flip Forward", false, "Very buggy, experimental.");
		((Component)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Core/Main Camera.prefab").WaitForCompletion().transform.GetChild(0)).gameObject.AddComponent<FlipBehaviour>();
	}
}