Decompiled source of BetterJournalist v1.0.0

BepInEx/plugins/Dorfistain-BetterJournalist.dll

Decompiled 2 months ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Dorfistain-BetterJournalist")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Dorfistain-BetterJournalist")]
[assembly: AssemblyTitle("Dorfistain-BetterJournalist")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("Dorfistain.BetterJournalist", "BetterJournalist", "1.0.0")]
public class BetterJournalistPlugin : BaseUnityPlugin
{
	[HarmonyPatch(typeof(Draw), "EnableDrawing")]
	private static class Patch_Enable
	{
		private static void Postfix(Draw __instance)
		{
			_draw = __instance;
			_penActive = true;
			_isDrawing = true;
			_customPickerEnabled = false;
			((Rect)(ref _win)).width = 0f;
		}
	}

	[HarmonyPatch(typeof(Draw), "DisableDrawing")]
	private static class Patch_Disable
	{
		private static void Postfix()
		{
			_draw = null;
			_isDrawing = false;
		}
	}

	[HarmonyPatch(typeof(DrawUI), "OnPenToolClicked")]
	private static class Patch_Pen
	{
		private static void Postfix()
		{
			_penActive = true;
		}
	}

	[HarmonyPatch(typeof(DrawUI), "OnEraseToolClicked")]
	private static class Patch_Erase
	{
		private static void Postfix()
		{
			_penActive = false;
		}
	}

	[HarmonyPatch(typeof(ColorTool), "Select")]
	private static class Patch_ColorSelect
	{
		private static void Postfix(ColorTool __instance)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			Color.RGBToHSV(Traverse.Create((object)__instance).Field("color").GetValue<Color>(), ref _hue, ref _sat, ref _val);
			_customPickerEnabled = false;
		}
	}

	[HarmonyPatch(typeof(SizeTool), "Select")]
	private static class Patch_SizeSelect
	{
		private static void Postfix(SizeTool __instance)
		{
			_size = Traverse.Create((object)__instance).Field("size").GetValue<int>();
			_customPickerEnabled = false;
		}
	}

	[HarmonyPatch(typeof(Draw), "Update")]
	private static class Patch_DrawUpdate
	{
		private static bool Prefix()
		{
			return !_pickerMouseDown;
		}
	}

	[HarmonyPatch(typeof(ArticleCreationUICanvas), "Publish")]
	private static class Patch_Publish
	{
		private static void Postfix()
		{
			_isDrawing = false;
		}
	}

	private static Draw _draw;

	private static bool _penActive = true;

	private static bool _isDrawing;

	private static float _hue = 0f;

	private static float _sat = 1f;

	private static float _val = 1f;

	private static float _size = 4f;

	private static Texture2D _svTex;

	private static Texture2D _hueTex;

	private static Texture2D _handleTex;

	private static Texture2D _backgroundTex;

	private static float _builtSvForHue = -1f;

	private static bool _customPickerEnabled = false;

	private const int WIN_W = 471;

	private const int WIN_H = 442;

	private const int SV = 260;

	private const int HW = 31;

	private const int HD = 18;

	private const int SV_X = 85;

	private const int SV_Y = 56;

	private const int HUE_X = 355;

	private const int HUE_Y = 56;

	private const int SZ_Y = 374;

	private const int SZ_LBL_X = 48;

	private const int SZ_SLIDER_X = 82;

	private const int SZ_VAL_X = 381;

	private const int SZ_SLIDER_W = 299;

	private static Rect _win;

	private static bool _dragSV;

	private static bool _dragHue;

	private static bool _pickerMouseDown;

	private static GUIStyle _noChrome;

	private static GUIStyle _szLabelStyle;

	private static GUIStyle _sliderBg;

	private static GUIStyle _sliderThumb;

	private void Awake()
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
		new Harmony("Dorfistain.BetterJournalist").PatchAll();
		((BaseUnityPlugin)this).Logger.LogInfo((object)"BetterJournalist v1.0.0 loaded — Synced HSV picker!");
	}

	private void OnGUI()
	{
		//IL_0056: 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_0128: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: Unknown result type (might be due to invalid IL or missing references)
		//IL_0148: Expected O, but got Unknown
		//IL_0143: Unknown result type (might be due to invalid IL or missing references)
		//IL_0148: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Expected O, but got Unknown
		//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: Expected O, but got Unknown
		//IL_00c4: 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_00e2: Expected O, but got Unknown
		//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: Expected O, but got Unknown
		if (_isDrawing && !((Object)(object)_draw == (Object)null))
		{
			EnsureTex();
			if (((Rect)(ref _win)).width == 0f)
			{
				_win = new Rect((float)(Screen.width - 471 - 15), (float)(Screen.height - 442) * 0.5f, 471f, 442f);
			}
			if (_noChrome == null)
			{
				_noChrome = new GUIStyle(GUI.skin.window);
				_noChrome.normal.background = null;
				_noChrome.onNormal.background = null;
				_szLabelStyle = new GUIStyle(GUI.skin.label)
				{
					fontSize = 17
				};
				_szLabelStyle.normal.textColor = Color.black;
				_sliderBg = new GUIStyle(GUI.skin.horizontalSlider);
				_sliderBg.fixedHeight = 0f;
				_sliderThumb = new GUIStyle(GUI.skin.horizontalSliderThumb);
				_sliderThumb.fixedWidth = 28f;
				_sliderThumb.fixedHeight = 28f;
			}
			_win = GUI.Window(12482533, _win, new WindowFunction(DrawWindow), GUIContent.none, _noChrome);
		}
	}

	private static void DrawWindow(int _)
	{
		//IL_0007: 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)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a5: 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_00fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: Invalid comparison between Unknown and I4
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_011d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0225: Unknown result type (might be due to invalid IL or missing references)
		//IL_022a: Unknown result type (might be due to invalid IL or missing references)
		//IL_022b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0245: Unknown result type (might be due to invalid IL or missing references)
		//IL_0254: Unknown result type (might be due to invalid IL or missing references)
		//IL_027e: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_018b: Unknown result type (might be due to invalid IL or missing references)
		//IL_012e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0158: Unknown result type (might be due to invalid IL or missing references)
		//IL_0125: Unknown result type (might be due to invalid IL or missing references)
		//IL_012b: Invalid comparison between Unknown and I4
		//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0193: Unknown result type (might be due to invalid IL or missing references)
		//IL_0199: Invalid comparison between Unknown and I4
		//IL_035f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0339: Unknown result type (might be due to invalid IL or missing references)
		Event current = Event.current;
		if ((int)current.type == 0)
		{
			_pickerMouseDown = true;
		}
		if ((Object)(object)_backgroundTex != (Object)null)
		{
			GUI.DrawTexture(new Rect(0f, 0f, 471f, 442f), (Texture)(object)_backgroundTex);
		}
		Rect val = default(Rect);
		((Rect)(ref val))..ctor(85f, 56f, 260f, 260f);
		Rect val2 = default(Rect);
		((Rect)(ref val2))..ctor(355f, 56f, 31f, 260f);
		if (!Mathf.Approximately(_builtSvForHue, _hue))
		{
			BuildSVTex();
			_builtSvForHue = _hue;
		}
		GUI.DrawTexture(val, (Texture)(object)_svTex);
		GUI.DrawTexture(val2, (Texture)(object)_hueTex);
		if ((int)current.type == 0)
		{
			if (((Rect)(ref val)).Contains(current.mousePosition))
			{
				_dragSV = true;
				_customPickerEnabled = true;
				current.Use();
			}
			if (((Rect)(ref val2)).Contains(current.mousePosition))
			{
				_dragHue = true;
				_customPickerEnabled = true;
				current.Use();
			}
		}
		if ((int)current.type == 1)
		{
			_pickerMouseDown = false;
			_dragSV = (_dragHue = false);
		}
		if (_dragSV && ((int)current.type == 0 || (int)current.type == 3))
		{
			_sat = Mathf.Clamp01((current.mousePosition.x - ((Rect)(ref val)).x) / ((Rect)(ref val)).width);
			_val = Mathf.Clamp01(1f - (current.mousePosition.y - ((Rect)(ref val)).y) / ((Rect)(ref val)).height);
			current.Use();
		}
		if (_dragHue && ((int)current.type == 0 || (int)current.type == 3))
		{
			_hue = Mathf.Clamp01((current.mousePosition.y - ((Rect)(ref val2)).y) / ((Rect)(ref val2)).height);
			current.Use();
		}
		DrawHandle(((Rect)(ref val)).x + _sat * ((Rect)(ref val)).width, ((Rect)(ref val)).y + (1f - _val) * ((Rect)(ref val)).height);
		DrawHandle(370.5f, 56f + _hue * 260f);
		Color color = (GUI.color = Color.HSVToRGB(_hue, _sat, _val));
		GUI.DrawTexture(new Rect(355f, 318f, 31f, 8f), (Texture)(object)Texture2D.whiteTexture);
		GUI.color = Color.white;
		int brushSize = Mathf.RoundToInt(_size);
		GUI.Label(new Rect(48f, 374f, 34f, 24f), "Sz:", _szLabelStyle);
		float size = _size;
		_size = GUI.HorizontalSlider(new Rect(82f, 376f, 299f, 20f), _size, 1f, 100f, _sliderBg, _sliderThumb);
		if (!Mathf.Approximately(size, _size))
		{
			_customPickerEnabled = true;
		}
		GUI.Label(new Rect(381f, 374f, 47f, 24f), brushSize + "px", _szLabelStyle);
		if (_customPickerEnabled && (Object)(object)_draw != (Object)null)
		{
			if (_penActive)
			{
				_draw.SetColor(color);
			}
			_draw.SetBrushSize(brushSize);
		}
		GUI.DragWindow(new Rect(0f, 0f, 471f, 442f));
	}

	private static void DrawHandle(float cx, float cy)
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		int num = 9;
		GUI.DrawTexture(new Rect(cx - (float)num, cy - (float)num, 18f, 18f), (Texture)(object)_handleTex);
	}

	private static void BuildSVTex()
	{
		//IL_0019: 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_002a: Expected O, but got Unknown
		//IL_005e: 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)
		if ((Object)(object)_svTex == (Object)null)
		{
			_svTex = new Texture2D(260, 260, (TextureFormat)3, false)
			{
				filterMode = (FilterMode)1
			};
		}
		Color[] array = (Color[])(object)new Color[67600];
		for (int i = 0; i < 260; i++)
		{
			float num = (float)i / 259f;
			for (int j = 0; j < 260; j++)
			{
				array[i * 260 + j] = Color.HSVToRGB(_hue, (float)j / 259f, num);
			}
		}
		_svTex.SetPixels(array);
		_svTex.Apply();
	}

	private static void EnsureTex()
	{
		//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)
		//IL_0046: Expected O, but got Unknown
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Expected O, but got Unknown
		//IL_006d: 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_007e: 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_0195: Unknown result type (might be due to invalid IL or missing references)
		//IL_019a: 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_0142: Unknown result type (might be due to invalid IL or missing references)
		//IL_017f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)_svTex == (Object)null)
		{
			BuildSVTex();
			_builtSvForHue = _hue;
		}
		if ((Object)(object)_hueTex == (Object)null)
		{
			_hueTex = new Texture2D(31, 260, (TextureFormat)3, false)
			{
				filterMode = (FilterMode)1
			};
			Color[] array = (Color[])(object)new Color[8060];
			for (int i = 0; i < 260; i++)
			{
				Color val = Color.HSVToRGB(1f - (float)i / 259f, 1f, 1f);
				for (int j = 0; j < 31; j++)
				{
					array[i * 31 + j] = val;
				}
			}
			_hueTex.SetPixels(array);
			_hueTex.Apply();
		}
		if ((Object)(object)_handleTex == (Object)null)
		{
			_handleTex = new Texture2D(18, 18, (TextureFormat)5, false)
			{
				filterMode = (FilterMode)1
			};
			Color[] array2 = (Color[])(object)new Color[324];
			float num = 9f;
			for (int k = 0; k < 18; k++)
			{
				for (int l = 0; l < 18; l++)
				{
					float num2 = (float)l - num + 0.5f;
					float num3 = (float)k - num + 0.5f;
					float num4 = Mathf.Sqrt(num2 * num2 + num3 * num3);
					if (num4 >= num - 3f && num4 < num)
					{
						array2[k * 18 + l] = Color.white;
					}
					else if (num4 >= num - 5f && num4 < num - 3f)
					{
						array2[k * 18 + l] = new Color(0f, 0f, 0f, 0.8f);
					}
					else
					{
						array2[k * 18 + l] = Color.clear;
					}
				}
			}
			_handleTex.SetPixels(array2);
			_handleTex.Apply();
		}
		if ((Object)(object)_backgroundTex == (Object)null)
		{
			_backgroundTex = LoadBackgroundImage();
		}
	}

	private static Texture2D LoadBackgroundImage()
	{
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Expected O, but got Unknown
		try
		{
			string directoryName = Path.GetDirectoryName(typeof(BetterJournalistPlugin).Assembly.Location);
			string[] array = new string[3]
			{
				Path.Combine(directoryName, "ColorPickerGUI.png"),
				Path.Combine(directoryName, "..", "ColorPickerGUI.png"),
				Path.Combine(directoryName, "..\\..\\BetterJournalist", "ColorPickerGUI.png")
			};
			foreach (string path in array)
			{
				if (File.Exists(path))
				{
					byte[] array2 = File.ReadAllBytes(path);
					Texture2D val = new Texture2D(256, 256, (TextureFormat)4, false);
					if (ImageConversion.LoadImage(val, array2))
					{
						return val;
					}
				}
			}
		}
		catch (Exception)
		{
		}
		return null;
	}
}