Decompiled source of AlliedMonsterColors v1.0.0

AlliedMonsterColors.dll

Decompiled 4 days ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using UnityEngine;
using UnityEngine.ResourceManagement.AsyncOperations;

[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 = ".NET Standard 2.1")]
[assembly: AssemblyCompany("AlliedMonsterColors")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+f005a14fe1330b31b6239319652966669ecd54e0")]
[assembly: AssemblyProduct("AlliedMonsterColors")]
[assembly: AssemblyTitle("AlliedMonsterColors")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace AlliedMonsterColors
{
	[BepInPlugin("Alexio_Xela.AlliedMonsterColors", "AlliedMonsterColors", "0.1.1")]
	public class AlliedMonsterColors : BaseUnityPlugin
	{
		public const string PluginGUID = "Alexio_Xela.AlliedMonsterColors";

		public const string PluginAuthor = "Alexio_Xela";

		public const string PluginName = "AlliedMonsterColors";

		public const string PluginVersion = "0.1.1";

		public static Material colorMaterial;

		private static AlliedMonsterColorsConfig _config;

		internal static ManualLogSource log { get; set; }

		public void Awake()
		{
			Log.Init(((BaseUnityPlugin)this).Logger);
			log = ((BaseUnityPlugin)this).Logger;
			_config = new AlliedMonsterColorsConfig(((BaseUnityPlugin)this).Config);
			SetupHooks();
		}

		public void Start()
		{
			if (Chainloader.PluginInfos.TryGetValue("com.rune580.riskofoptions", out var _))
			{
				_config.BuildRiskOfOptionsMenu();
			}
		}

		private void SetupHooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			CharacterModel.InitMaterials += new hook_InitMaterials(CharacterModel_InitMaterials);
			CharacterModel.UpdateOverlays += new hook_UpdateOverlays(CharacterModel_UpdateOverlays);
		}

		public static void config_SettingChanged(object obj, EventArgs eventArgs)
		{
			colorMaterial = setMatColorEffect(colorMaterial);
		}

		private void CharacterModel_InitMaterials(orig_InitMaterials orig)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke();
			AsyncOperationHandle<Material> val = LegacyResourcesAPI.LoadAsync<Material>("Materials/matGhostEffect");
			val.Completed += delegate(AsyncOperationHandle<Material> x)
			{
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Expected O, but got Unknown
				colorMaterial = setMatColorEffect(new Material(x.Result));
			};
		}

		private static Material setMatColorEffect(Material material)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			material.SetColor("_TintColor", _config.RecolorTint);
			material.SetTexture("_RemapTex", (Texture)null);
			material.SetFloat("_Boost", _config.RecolorBrightness * (_config.EnableAlliedMonsterColors ? 1f : 0f));
			((Object)material).name = "matColorEffect";
			return material;
		}

		private void CharacterModel_UpdateOverlays(orig_UpdateOverlays orig, CharacterModel characterModel)
		{
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Invalid comparison between Unknown and I4
			orig.Invoke(characterModel);
			if (_config.EnableAlliedMonsterColors && (Object)(object)characterModel.body != (Object)null && (Object)(object)characterModel.body.master != (Object)null && (int)characterModel.body.master.teamIndex == 1 && characterModel.activeOverlayCount < CharacterModel.maxOverlays && (!((Object)characterModel.body).name.ToLower().Contains("gummy") || _config.RecolorAlliedNonmonsters) && (!characterModel.body.isPlayerControlled || _config.RecolorAlliedPlayers || !((Object)(object)characterModel.body.master != (Object)(object)LocalUserManager.GetFirstLocalUser().cachedMaster)))
			{
				string text = ((Object)characterModel.body).name.ToLower();
				if (((!text.Contains("drone") && !text.Contains("turret")) || _config.RecolorAlliedNonmonsters) && (text.Contains("drone") || text.Contains("turret") || characterModel.body.isPlayerControlled || _config.RecolorAlliedMonsters || (!(text != "beetleguardallybody(clone)") && _config.RecolorAlliedBeetles)) && (!((Object)(object)characterModel.body.master == (Object)(object)LocalUserManager.GetFirstLocalUser().cachedMaster) || _config.RecolorSelf))
				{
					AddOverlay(colorMaterial);
				}
			}
			void AddOverlay(Material overlayMaterial)
			{
				Material[] currentOverlays = characterModel.currentOverlays;
				CharacterModel obj = characterModel;
				int activeOverlayCount = obj.activeOverlayCount;
				obj.activeOverlayCount = activeOverlayCount + 1;
				currentOverlays[activeOverlayCount] = overlayMaterial;
			}
		}
	}
	internal class AlliedMonsterColorsConfig
	{
		private readonly ConfigEntry<bool> _enableAlliedMonsterColors;

		private readonly ConfigEntry<Color> _recolorTint;

		private readonly ConfigEntry<float> _recolorBrightness;

		private readonly ConfigEntry<bool> _recolorAlliedBeetles;

		private readonly ConfigEntry<bool> _recolorAlliedMonsters;

		private readonly ConfigEntry<bool> _recolorAlliedNonmonsters;

		private readonly ConfigEntry<bool> _recolorAlliedPlayers;

		private readonly ConfigEntry<bool> _recolorSelf;

		public static int configUpdateCount;

		public bool EnableAlliedMonsterColors => _enableAlliedMonsterColors.Value;

		public Color RecolorTint => _recolorTint.Value;

		public float RecolorBrightness => _recolorBrightness.Value;

		public bool RecolorAlliedBeetles => _recolorAlliedBeetles.Value;

		public bool RecolorAlliedMonsters => _recolorAlliedMonsters.Value;

		public bool RecolorAlliedNonmonsters => _recolorAlliedNonmonsters.Value;

		public bool RecolorAlliedPlayers => _recolorAlliedPlayers.Value;

		public bool RecolorSelf => _recolorSelf.Value;

		public AlliedMonsterColorsConfig(ConfigFile config)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			_enableAlliedMonsterColors = config.Bind<bool>("General", "EnableAlliedMonsterColors", true, "Enables/Disables the entire mod.");
			_recolorTint = config.Bind<Color>("General", "RecolorTint", Color.green, "Sets the new color for the selected entities.");
			_recolorBrightness = config.Bind<float>("General", "RecolorBrightness", 0.5f, "Sets the recolor brightness for the selected entities. (Setting to 0.0 makes the recolor not visible.)");
			_recolorAlliedBeetles = config.Bind<bool>("General", "RecolorAlliedBeetles", true, "Maybe you think most allied monsters look fine, but just the Queen's Gland Beetle Guards look too similar? This option only colors the Queen's Gland spawns.");
			_recolorAlliedMonsters = config.Bind<bool>("General", "RecolorAlliedMonsters", true, "Recolors allied monsters (e.g. Happiest Mask ghosts).");
			_recolorAlliedNonmonsters = config.Bind<bool>("General", "RecolorAlliedNonmonsters", false, "Recolors allied non-monsters (e.g. turrets/drones).");
			_recolorAlliedPlayers = config.Bind<bool>("General", "RecolorAlliedPlayers", false, "Recolors allied players (if playing multiplayer).");
			_recolorSelf = config.Bind<bool>("General", "RecolorSelf", false, "Recolors self (since you are your own ally).");
			_enableAlliedMonsterColors.SettingChanged += AlliedMonsterColors.config_SettingChanged;
			_recolorTint.SettingChanged += AlliedMonsterColors.config_SettingChanged;
			_recolorBrightness.SettingChanged += AlliedMonsterColors.config_SettingChanged;
			_recolorAlliedMonsters.SettingChanged += AlliedMonsterColors.config_SettingChanged;
			_recolorAlliedNonmonsters.SettingChanged += AlliedMonsterColors.config_SettingChanged;
			_recolorAlliedPlayers.SettingChanged += AlliedMonsterColors.config_SettingChanged;
			_recolorSelf.SettingChanged += AlliedMonsterColors.config_SettingChanged;
		}

		public void BuildRiskOfOptionsMenu()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Expected O, but got Unknown
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Expected O, but got Unknown
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Expected O, but got Unknown
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Expected O, but got Unknown
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: 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_00ce: 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)
			//IL_00ea: Expected O, but got Unknown
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Expected O, but got Unknown
			//IL_00f6: 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_010b: Expected O, but got Unknown
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Expected O, but got Unknown
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Expected O, but got Unknown
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Expected O, but got Unknown
			//IL_0138: 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_014d: Expected O, but got Unknown
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Expected O, but got Unknown
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Expected O, but got Unknown
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Expected O, but got Unknown
			//IL_017a: 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_018f: Expected O, but got Unknown
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Expected O, but got Unknown
			byte[] array = File.ReadAllBytes(Assembly.GetExecutingAssembly().Location.Replace("AlliedMonsterColors.dll", "") + "icon.png");
			Texture2D val = new Texture2D(256, 256);
			ImageConversion.LoadImage(val, array);
			Sprite modIcon = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), Vector2.zero);
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(_enableAlliedMonsterColors, new CheckBoxConfig
			{
				description = "Enables/Disables the entire mod."
			}));
			ModSettingsManager.AddOption((BaseOption)new ColorOption(_recolorTint, new ColorOptionConfig
			{
				description = "Sets the new color for the selected entities."
			}));
			ModSettingsManager.AddOption((BaseOption)new SliderOption(_recolorBrightness, new SliderConfig
			{
				min = 0f,
				max = 20f,
				FormatString = "{0:0.0}",
				description = "Sets the recolor brightness for the selected entities."
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(_recolorAlliedBeetles, new CheckBoxConfig
			{
				description = "Maybe you think most allied monsters look fine, but just the Queen's Gland Beetle Guards look too similar? This option only colors the Queen's Gland spawns.\""
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(_recolorAlliedMonsters, new CheckBoxConfig
			{
				description = "Recolors allied monsters (e.g. Happiest Mask ghosts)."
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(_recolorAlliedNonmonsters, new CheckBoxConfig
			{
				description = "Recolors allied non-monsters (i.e. turrets/drones)."
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(_recolorAlliedPlayers, new CheckBoxConfig
			{
				description = "Recolors allied players (if playing multiplayer)."
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(_recolorSelf, new CheckBoxConfig
			{
				description = "Recolors self (since you are your own ally, I suppose)."
			}));
			ModSettingsManager.SetModDescription("A Risk of Rain 2 mod to recolor allied units so they're easier to see, especially monsters so you know they're allied.");
			ModSettingsManager.SetModIcon(modIcon);
		}
	}
	internal static class Log
	{
		private static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		internal static void Debug(object data)
		{
			_logSource.LogDebug(data);
		}

		internal static void Error(object data)
		{
			_logSource.LogError(data);
		}

		internal static void Fatal(object data)
		{
			_logSource.LogFatal(data);
		}

		internal static void Info(object data)
		{
			_logSource.LogInfo(data);
		}

		internal static void Message(object data)
		{
			_logSource.LogMessage(data);
		}

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
}