Decompiled source of DamageOverlay v1.0.4

DamageOverlay.dll

Decompiled a month ago
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.UI;

[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("blacks7ar")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.4")]
[assembly: AssemblyInformationalVersion("1.0.4")]
[assembly: AssemblyProduct("DamageOverlay")]
[assembly: AssemblyTitle("DamageOverlay")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.4.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 DamageOverlay
{
	[BepInPlugin("blacks7ar.DamageOverlay", "DamageOverlay", "1.0.4")]
	public class Plugin : BaseUnityPlugin
	{
		[HarmonyPatch]
		public static class Patches
		{
			private static float _durationTimer;

			[HarmonyPrefix]
			[HarmonyPatch(typeof(Hud), "Awake")]
			public static void Awake_Prefix(Hud __instance)
			{
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: 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_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0040: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Expected O, but got Unknown
				//IL_0096: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
				//IL_0113: 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_0141: Unknown result type (might be due to invalid IL or missing references)
				//IL_0183: Unknown result type (might be due to invalid IL or missing references)
				__instance.m_damageScreen.sprite = _damageOverlay;
				Color color = ((Graphic)__instance.m_damageScreen).color;
				((Color)(ref color))..ctor(color.r, color.g, color.b, 0f);
				((Graphic)__instance.m_damageScreen).color = color;
				GameObject gameObject;
				(gameObject = ((Component)__instance.m_damageScreen).gameObject).SetActive(true);
				_newDamageScreenObject = new GameObject("extraDamageScreen");
				_newDamageScreenObject.transform.SetParent(gameObject.transform);
				_newDamageScreenObject.transform.localPosition = new Vector3(0f, 0f, 0f);
				_newDamageScreenObject.transform.localScale = ((Component)__instance.m_damageScreen).gameObject.transform.localScale;
				_newDamageScreenObject.layer = 5;
				RectTransform obj = _newDamageScreenObject.AddComponent<RectTransform>();
				((Transform)obj).localPosition = new Vector3(0f, 0f, 0f);
				obj.anchorMin = new Vector2(0f, 0f);
				obj.anchorMax = new Vector2(1f, 1f);
				obj.pivot = new Vector2(0.5f, 0.5f);
				((Transform)obj).localScale = new Vector3(1f, 1f, 1f);
				_newDamageScreenObject.AddComponent<CanvasRenderer>().cullTransparentMesh = false;
				_newDamageScreen = _newDamageScreenObject.AddComponent<Image>();
				((Graphic)_newDamageScreen).color = new Color(255f, 0f, 0f, 0f);
				((Component)_newDamageScreen).gameObject.SetActive(true);
			}

			[HarmonyPrefix]
			[HarmonyPatch(typeof(Hud), "DamageFlash")]
			public static void DamageFlash_Prefix(Hud __instance)
			{
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				//IL_0015: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0020: 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)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0053: Unknown result type (might be due to invalid IL or missing references)
				//IL_0059: 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)
				_durationTimer = 0f;
				Color color = ((Graphic)__instance.m_damageScreen).color;
				Color color2 = ((Graphic)_newDamageScreen).color;
				((Color)(ref color))..ctor(color.r, color.g, color.b, 1f);
				((Graphic)__instance.m_damageScreen).color = color;
				((Color)(ref color2))..ctor(color2.r, color2.g, color2.b, 0.1f);
				((Graphic)_newDamageScreen).color = color2;
				((Component)__instance.m_damageScreen).gameObject.SetActive(true);
				((Component)_newDamageScreen).gameObject.SetActive(true);
			}

			[HarmonyPrefix]
			[HarmonyPatch(typeof(Hud), "UpdateDamageFlash")]
			public static void UpdateDamageFlash_Prefix(Hud __instance, float dt)
			{
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_0019: 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_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0055: 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_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0077: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
				if ((Object)(object)Player.m_localPlayer == (Object)null)
				{
					return;
				}
				Color color = ((Graphic)__instance.m_damageScreen).color;
				Color color2 = ((Graphic)_newDamageScreen).color;
				if (!(((Graphic)__instance.m_damageScreen).color.a > 0f))
				{
					return;
				}
				if ((double)((Character)Player.m_localPlayer).GetHealthPercentage() < 0.2)
				{
					((Color)(ref color))..ctor(color.r, color.g, color.b, 1f);
					((Graphic)__instance.m_damageScreen).color = color;
					((Component)__instance.m_damageScreen).gameObject.SetActive(true);
				}
				_durationTimer += dt;
				if (_durationTimer > 10f)
				{
					color.a = Mathf.MoveTowards(color.a, 0f, dt * 0.05f);
					((Graphic)__instance.m_damageScreen).color = color;
					color2.a = Mathf.MoveTowards(color2.a, 0f, dt * 4f);
					((Graphic)_newDamageScreen).color = color2;
					if (((Graphic)_newDamageScreen).color.a <= 0f)
					{
						((Component)_newDamageScreen).gameObject.SetActive(false);
					}
				}
			}
		}

		private const string modGUID = "blacks7ar.DamageOverlay";

		public const string modName = "DamageOverlay";

		public const string modAuthor = "blacks7ar";

		public const string modVersion = "1.0.4";

		public const string modLink = "https://valheim.thunderstore.io/package/blacks7ar/DamageOverlay/";

		private static readonly Harmony _harmony = new Harmony("blacks7ar.DamageOverlay");

		private static AssetBundle _overlayBundle;

		private static Sprite _damageOverlay;

		private static GameObject _newDamageScreenObject;

		private static Image _newDamageScreen;

		public void Awake()
		{
			_overlayBundle = GetAssetBundleFromResources("overlaybundle");
			_damageOverlay = _overlayBundle.LoadAsset<Sprite>("Assets/CustomAssets/damageoverlay.png");
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			_harmony.PatchAll(executingAssembly);
		}

		private static AssetBundle GetAssetBundleFromResources(string filename)
		{
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			string name = executingAssembly.GetManifestResourceNames().Single((string x) => x.EndsWith(filename));
			using Stream stream = executingAssembly.GetManifestResourceStream(name);
			return AssetBundle.LoadFromStream(stream);
		}
	}
}