Decompiled source of ColorCrosshair v1.1.0

ColorCrosshair.dll

Decompiled a month ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Unity.IL2CPP;
using ColorCrosshair.API;
using GTFO.API.Utilities;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("ColorCrosshair")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+a76fbd3f996b5dcbc84ba9e3f113eda1b6e8fa05")]
[assembly: AssemblyProduct("ColorCrosshair")]
[assembly: AssemblyTitle("ColorCrosshair")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace ColorCrosshair
{
	internal static class ColorPatch
	{
		public static void Init()
		{
			ColorCrosshairAPI.OnReload += RefreshDefaultColors;
		}

		public static void RefreshDefaultColors()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: 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_0021: 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_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: 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_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			CrosshairGuiLayer crosshairLayer = GuiManager.CrosshairLayer;
			CircleCrosshair circleCrosshair = crosshairLayer.m_circleCrosshair;
			Color color = (circleCrosshair.m_crosshairColOrg = Configuration.defaultColor);
			circleCrosshair.SetColor(color);
			color = (circleCrosshair.m_chargeUpColOrg = Configuration.chargeColor);
			circleCrosshair.SetChargeUpColor(color);
			float value = CellSettingsManager.SettingsData.HUD.Player_HitIndicatorOpacity.Value;
			foreach (CrosshairHitIndicator item in (Il2CppArrayBase<CrosshairHitIndicator>)(object)crosshairLayer.m_hitIndicators)
			{
				item.m_hitColor = Configuration.hitmarkerColor;
				item.UpdateColorsWithAlphaMul(value);
			}
			foreach (CrosshairHitIndicator item2 in (Il2CppArrayBase<CrosshairHitIndicator>)(object)crosshairLayer.m_weakspotHitIndicators)
			{
				item2.m_hitColor = Configuration.critHitmarkerColor;
				item2.m_deathColor = Configuration.killHitmarkerColor;
				item2.UpdateColorsWithAlphaMul(value);
			}
			foreach (CrosshairHitIndicator item3 in (Il2CppArrayBase<CrosshairHitIndicator>)(object)crosshairLayer.m_noDamageHitIndicators)
			{
				item3.m_hitColor = Configuration.armorHitmarkerColor;
				item3.UpdateColorsWithAlphaMul(value);
			}
		}

		[HarmonyPatch(typeof(CrosshairGuiLayer), "Setup")]
		[HarmonyWrapSafe]
		[HarmonyPostfix]
		private static void SetDefaultColors(CrosshairGuiLayer __instance)
		{
			RefreshDefaultColors();
		}

		[HarmonyPatch(typeof(CrosshairGuiLayer), "TriggerChargeUpBlink")]
		[HarmonyWrapSafe]
		[HarmonyPrefix]
		private static void SetChargeNotificationColors(ref Color blinkColor)
		{
			//IL_0001: 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_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			if (((Color)(ref blinkColor)).Equals(Color.white))
			{
				blinkColor = Configuration.chargeBlinkColor;
			}
			else
			{
				blinkColor = Configuration.chargeWarningColor;
			}
		}

		[HarmonyPatch(typeof(CrosshairGuiLayer), "TriggerBlink")]
		[HarmonyWrapSafe]
		[HarmonyPrefix]
		private static void SetEnemyInRangeColor(ref Color blinkColor)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			blinkColor = Configuration.enemyBlinkColor;
		}
	}
	internal static class Configuration
	{
		public static Color defaultColor = new Color(0.65f, 0.65f, 0.65f, 1f);

		public static Color chargeColor = new Color(0.85f, 0.85f, 0.85f, 0.7f);

		public static Color chargeBlinkColor = Color.white;

		public static Color chargeWarningColor = ColorExt.Red(0.6f);

		public static Color enemyBlinkColor = Color.white;

		public static Color hitmarkerColor = new Color(1f, 0f, 0f, 0.408f);

		public static Color critHitmarkerColor = new Color(1f, 0.212f, 0f, 0.314f);

		public static Color killHitmarkerColor = new Color(1f, 0.678f, 0.051f, 1f);

		public static Color armorHitmarkerColor = new Color(1f, 1f, 1f, 0.22f);

		private static ConfigFile configFile;

		internal static void Init()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			configFile = new ConfigFile(Path.Combine(Paths.ConfigPath, "ColorCrosshair.cfg"), true);
			BindAll(configFile);
			ColorCrosshairAPI.OnReload += OnFileChanged;
		}

		private static void OnFileChanged()
		{
			string text = "General Settings";
			configFile.Reload();
			SetField(ref defaultColor, (string)configFile[text, "Default Color"].BoxedValue);
			SetField(ref chargeColor, (string)configFile[text, "Chargeup Color"].BoxedValue);
			SetField(ref chargeBlinkColor, (string)configFile[text, "Charge Finished Color"].BoxedValue);
			SetField(ref chargeWarningColor, (string)configFile[text, "Charge Warning Color"].BoxedValue);
			SetField(ref enemyBlinkColor, (string)configFile[text, "Enemy In Range Color"].BoxedValue);
			text = "Hitmarker Settings";
			SetField(ref hitmarkerColor, (string)configFile[text, "Hitmarker Color"].BoxedValue);
			SetField(ref critHitmarkerColor, (string)configFile[text, "Crit Hitmarker Color"].BoxedValue);
			SetField(ref killHitmarkerColor, (string)configFile[text, "Kill Hitmarker Color"].BoxedValue);
			SetField(ref armorHitmarkerColor, (string)configFile[text, "Armor Hitmarker Color"].BoxedValue);
		}

		private static void SetField(ref Color field, string val)
		{
			//IL_0022: 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 (!val.StartsWith('#'))
			{
				val = "#" + val;
			}
			Color val2 = default(Color);
			if (ColorUtility.TryParseHtmlString(val, ref val2))
			{
				field = val2;
			}
		}

		private static void BindAll(ConfigFile config)
		{
			string section = "General Settings";
			BindField(ref defaultColor, config, section, "Default Color", "The default color of the reticle.\nVanilla default: #7d7d7d99");
			BindField(ref chargeColor, config, section, "Chargeup Color", "The color for melee weapon charging progress.\nVanilla default: #BEBEBEAD");
			BindField(ref chargeBlinkColor, config, section, "Charge Finished Color", "The color that briefly blinks when melee weapon charging finishes.\nVanilla default: #FFFFFFFF");
			BindField(ref chargeWarningColor, config, section, "Charge Warning Color", "The color that briefly blinks when the melee weapon charge is about to expire.\nVanilla default: #FF000099");
			BindField(ref enemyBlinkColor, config, section, "Enemy In Range Color", "The color that briefly blinks when looking at an enemy in melee range while holding a melee weapon.\nVanilla default: #FFFFFFFF");
			section = "Hitmarker Settings";
			BindField(ref hitmarkerColor, config, section, "Hitmarker Color", "The color for normal hitmarkers.\nVanilla default: #FF000068");
			BindField(ref critHitmarkerColor, config, section, "Crit Hitmarker Color", "The color for weakspot or back damage hitmarkers.\nVanilla default: #FF360050");
			BindField(ref killHitmarkerColor, config, section, "Kill Hitmarker Color", "The color for kill hitmarkers.\nVanilla default: #FFAD0DFF");
			BindField(ref armorHitmarkerColor, config, section, "Armor Hitmarker Color", "The color for armor damage hitmarkers.\nVanilla default: #FFFFFF46");
		}

		private static void BindField(ref Color field, ConfigFile config, string section, string key, string description)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			string value = config.Bind<string>(section, key, ColorUtility.ToHtmlStringRGBA(field), description).Value;
			SetField(ref field, value);
		}
	}
	[BepInPlugin("Dinorush.ColorCrosshair", "ColorCrosshair", "1.1.0")]
	internal sealed class Loader : BasePlugin
	{
		public const string MODNAME = "ColorCrosshair";

		[Conditional("DEBUG")]
		public static void DebugLog(object data)
		{
		}

		public override void Load()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			((BasePlugin)this).Log.LogMessage((object)"Loading ColorCrosshair");
			Configuration.Init();
			ColorPatch.Init();
			ColorCrosshairAPI.Init();
			new Harmony("ColorCrosshair").PatchAll(typeof(ColorPatch));
			((BasePlugin)this).Log.LogMessage((object)"Loaded ColorCrosshair");
		}
	}
}
namespace ColorCrosshair.API
{
	public static class ColorCrosshairAPI
	{
		public static Color DefaultColor => Configuration.defaultColor;

		public static Color ChargeColor => Configuration.chargeColor;

		public static Color ChargeBlinkColor => Configuration.chargeBlinkColor;

		public static Color ChargeWarningColor => Configuration.chargeWarningColor;

		public static Color EnemyBlinkColor => Configuration.enemyBlinkColor;

		public static event Action? OnReload;

		internal static void Init()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			LiveEdit.CreateListener(Paths.ConfigPath, "ColorCrosshair.cfg", false).FileChanged += new LiveEditEventHandler(RunOnFileChanged);
		}

		private static void RunOnFileChanged(LiveEditEventArgs _)
		{
			ColorCrosshairAPI.OnReload?.Invoke();
		}
	}
}