Decompiled source of CasperCalc v1.0.1

plugins/CasperCalc/CasperCalc.dll

Decompiled a week ago
using System;
using System.Data;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EquinoxsModUtils;
using HarmonyLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("CasperCalc")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CasperCalc")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("ffc2e247-ae41-4e78-ba31-2a26157dcdf3")]
[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 CasperCalc;

[BepInPlugin("com.casper.CasperCalc", "CasperCalc", "1.0.0")]
public class mainPlugin : BaseUnityPlugin
{
	private const string MyGUID = "com.casper.CasperCalc";

	private const string PluginName = "CasperCalc";

	private const string VersionString = "1.0.0";

	private static readonly Harmony Harmony = new Harmony("com.casper.CasperCalc");

	public static ManualLogSource Log;

	private string input = "";

	private string result = "";

	private bool showCalculator = false;

	private bool inputFieldFocused = false;

	private float centeredX;

	private float centeredY;

	private Rect calculatorWindowRect;

	public static ConfigEntry<KeyCode> OpenCalc;

	public static ConfigEntry<KeyCode> ModifierKey;

	private void Awake()
	{
		Log = ((BaseUnityPlugin)this).Logger;
		Log.LogInfo((object)"PluginName: CasperCalc, VersionString: 1.0.0 is loading...");
		Harmony.PatchAll();
		CreateConfigEntries();
		Log.LogInfo((object)"PluginName: CasperCalc, VersionString: 1.0.0 is loaded.");
	}

	private void Start()
	{
		//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)
		centeredX = (Screen.width - 300) / 2;
		centeredY = (Screen.height - 200) / 2 + 300;
		calculatorWindowRect = new Rect(centeredX, centeredY, 400f, 200f);
	}

	private void Update()
	{
		//IL_0006: 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_0023: Unknown result type (might be due to invalid IL or missing references)
		if (Input.GetKeyDown(OpenCalc.Value) && ((int)ModifierKey.Value == 0 || Input.GetKey(ModifierKey.Value)))
		{
			ToggleCalculator();
		}
	}

	private void CreateConfigEntries()
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Expected O, but got Unknown
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Expected O, but got Unknown
		OpenCalc = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "Calculator Key", (KeyCode)110, new ConfigDescription("Key to open and close the window.", (AcceptableValueBase)null, Array.Empty<object>()));
		ModifierKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "Modifier Key", (KeyCode)306, new ConfigDescription("Optional modifier key (e.g., LeftControl). Set to None for no modifier.", (AcceptableValueBase)null, Array.Empty<object>()));
	}

	private void ToggleCalculator()
	{
		showCalculator = !showCalculator;
		EMU.FreeCursor(showCalculator);
		if (showCalculator)
		{
			inputFieldFocused = true;
		}
	}

	private void OnGUI()
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Expected O, but got Unknown
		//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)
		if (showCalculator)
		{
			GUI.color = Color.white;
			calculatorWindowRect = GUILayout.Window(0, calculatorWindowRect, new WindowFunction(CalculatorWindow), "CasperCalc", Array.Empty<GUILayoutOption>());
		}
	}

	private void CalculatorWindow(int windowID)
	{
		//IL_000b: 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_001a: Expected O, but got Unknown
		//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_0033: Expected O, but got Unknown
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Invalid comparison between Unknown and I4
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013e: Invalid comparison between Unknown and I4
		//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
		GUIStyle val = new GUIStyle(GUI.skin.textField)
		{
			fontSize = 24
		};
		GUIStyle val2 = new GUIStyle(GUI.skin.label)
		{
			fontSize = 24
		};
		if ((int)Event.current.type == 4 && Event.current.keyCode == OpenCalc.Value && ((int)ModifierKey.Value == 0 || Event.current.control))
		{
			ToggleCalculator();
			Event.current.Use();
		}
		if (GUI.Button(new Rect(((Rect)(ref calculatorWindowRect)).width - 35f, 5f, 30f, 30f), "X"))
		{
			ToggleCalculator();
		}
		GUILayout.Space(40f);
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		GUI.SetNextControlName("InputField");
		string text = GUILayout.TextField(input, val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(50f) });
		text = ValidateInput(text);
		if (text != input)
		{
			input = text;
			CalculateResult();
		}
		if ((int)Event.current.type == 7 && inputFieldFocused)
		{
			GUI.FocusControl("InputField");
			inputFieldFocused = false;
		}
		GUILayout.Label("Result: " + result, val2, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(50f) });
		GUILayout.EndVertical();
		GUI.DragWindow(new Rect(0f, 0f, ((Rect)(ref calculatorWindowRect)).width, 20f));
	}

	private void CalculateResult()
	{
		try
		{
			result = EvaluateExpression(input).ToString();
		}
		catch
		{
			result = "Error";
		}
	}

	private double EvaluateExpression(string expression)
	{
		DataTable dataTable = new DataTable();
		try
		{
			return double.Parse(dataTable.Compute(expression, "").ToString());
		}
		finally
		{
			((IDisposable)dataTable)?.Dispose();
		}
	}

	private string ValidateInput(string input)
	{
		string text = "0123456789+-*/().";
		StringBuilder stringBuilder = new StringBuilder();
		for (int i = 0; i < input.Length; i++)
		{
			char value = input[i];
			if (text.Contains(value.ToString()))
			{
				stringBuilder.Append(value);
			}
		}
		return stringBuilder.ToString();
	}
}