Decompiled source of DamageIndicatorFix v1.1.0

DamageIndicatorFix.dll

Decompiled 2 months ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using On.RoR2.PostProcessing;
using RoR2;
using RoR2.PostProcessing;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("DamageIndicatorFix")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("DamageIndicatorFix")]
[assembly: AssemblyTitle("DamageIndicatorFix")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace DamageIndicatorFix;

[BepInPlugin("com.Nuxlar.DamageIndicatorFix", "DamageIndicatorFix", "1.1.0")]
public class DamageIndicatorFix : BaseUnityPlugin
{
	[Serializable]
	[CompilerGenerated]
	private sealed class <>c
	{
		public static readonly <>c <>9 = new <>c();

		public static hook_Awake <>9__0_0;

		public static hook_OnClientDamage <>9__0_1;

		public static hook_OnRenderImage <>9__0_2;

		internal void <Awake>b__0_0(orig_Awake orig, DamageIndicator self)
		{
			orig.Invoke(self);
			self.indicatorDuration = 0.5f;
		}

		internal void <Awake>b__0_1(orig_OnClientDamage orig, DamageIndicator self, DamageDealtMessage damageDealtMessage)
		{
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)damageDealtMessage.victim == (Object)null || !Object.op_Implicit((Object)(object)self.cameraRigController) || !((Object)(object)damageDealtMessage.victim == (Object)(object)self.cameraRigController.localUserViewer.cachedBodyObject) || !Object.op_Implicit((Object)(object)self.cameraRigController) || !Object.op_Implicit((Object)(object)self.cameraRigController.target))
			{
				return;
			}
			float num = 0f;
			float num2 = 1f;
			HealthComponent component = damageDealtMessage.victim.GetComponent<HealthComponent>();
			if (Object.op_Implicit((Object)(object)component))
			{
				float num3 = Mathf.Clamp((component.health + damageDealtMessage.damage) / component.fullHealth, 0f, 1f);
				num2 = Mathf.Clamp(component.health / component.fullHealth, 0f, 1f);
				num = Mathf.Clamp(num3 - num2, 0.3f, 0.9f);
				self._indicatorValue = num;
				for (int i = 0; i < self.indicators.Length; i++)
				{
					self._indicatorTimestamps[i].hitTimeStamp = FixedTimeStamp.now;
					self._indicatorTimestamps[i].isActive = true;
				}
			}
		}

		internal void <Awake>b__0_2(orig_OnRenderImage orig, DamageIndicator self, RenderTexture source, RenderTexture destination)
		{
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)self.cameraRigController) && Object.op_Implicit((Object)(object)self.cameraRigController.target))
			{
				float num = 1f;
				HealthComponent component = self.cameraRigController.target.GetComponent<HealthComponent>();
				if (Object.op_Implicit((Object)(object)component))
				{
					num = Mathf.Clamp(component.health / component.fullHealth, 0f, 1f);
				}
				if (num <= 0.25f)
				{
					self._indicatorValue = 0.75f;
					for (int i = 0; i < self.indicators.Length; i++)
					{
						self._indicatorTimestamps[i].hitTimeStamp = FixedTimeStamp.now;
						self._indicatorTimestamps[i].isActive = true;
					}
				}
			}
			if (Mathf.Approximately(self._indicatorValue, 0f))
			{
				if (self.isEnabled)
				{
					self.ResetIndicators();
					self.mat.SetVectorArray("_Indicators", self.indicators);
					self.isEnabled = false;
				}
				Graphics.Blit((Texture)(object)source, destination, self.mat);
				return;
			}
			if (!self.isEnabled)
			{
				self.isEnabled = true;
			}
			self.mat.SetFloat("_BoxCornerRadius", self.boxCornerRadius);
			self.mat.SetFloat("_BoxFeather", self.boxFeather);
			self.mat.SetFloat("_BoxSize", self.GetBoxSize(self._indicatorValue));
			self.mat.SetColor("_TintColor", self.tintColor);
			self.mat.SetFloat("_IndicatorRadius", self.indicatorRadius);
			self.mat.SetFloat("_IndicatorFeather", self.indicatorFeather);
			for (int j = 0; j < self._indicatorTimestamps.Length; j++)
			{
				if (self._indicatorTimestamps[j].isActive)
				{
					float timeSince = ((FixedTimeStamp)(ref self._indicatorTimestamps[j].hitTimeStamp)).timeSince;
					if ((double)timeSince >= (double)self.indicatorDuration)
					{
						self._indicatorTimestamps[j].isActive = false;
					}
					else
					{
						self.indicators[j].z = Mathf.Clamp(self.indicatorOpacity.Evaluate(timeSince / self.indicatorDuration), 0f, 1f);
					}
				}
			}
			self.mat.SetVectorArray("_Indicators", self.indicators);
			Graphics.Blit((Texture)(object)source, destination, self.mat);
		}
	}

	public void Awake()
	{
		//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: Expected O, but got Unknown
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Expected O, but got Unknown
		//IL_005c: 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_0067: Expected O, but got Unknown
		object obj = <>c.<>9__0_0;
		if (obj == null)
		{
			hook_Awake val = delegate(orig_Awake orig, DamageIndicator self)
			{
				orig.Invoke(self);
				self.indicatorDuration = 0.5f;
			};
			<>c.<>9__0_0 = val;
			obj = (object)val;
		}
		DamageIndicator.Awake += (hook_Awake)obj;
		object obj2 = <>c.<>9__0_1;
		if (obj2 == null)
		{
			hook_OnClientDamage val2 = delegate(orig_OnClientDamage orig, DamageIndicator self, DamageDealtMessage damageDealtMessage)
			{
				//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
				if (!((Object)(object)damageDealtMessage.victim == (Object)null) && Object.op_Implicit((Object)(object)self.cameraRigController) && (Object)(object)damageDealtMessage.victim == (Object)(object)self.cameraRigController.localUserViewer.cachedBodyObject && Object.op_Implicit((Object)(object)self.cameraRigController) && Object.op_Implicit((Object)(object)self.cameraRigController.target))
				{
					float num2 = 0f;
					float num3 = 1f;
					HealthComponent component2 = damageDealtMessage.victim.GetComponent<HealthComponent>();
					if (Object.op_Implicit((Object)(object)component2))
					{
						float num4 = Mathf.Clamp((component2.health + damageDealtMessage.damage) / component2.fullHealth, 0f, 1f);
						num3 = Mathf.Clamp(component2.health / component2.fullHealth, 0f, 1f);
						num2 = Mathf.Clamp(num4 - num3, 0.3f, 0.9f);
						self._indicatorValue = num2;
						for (int k = 0; k < self.indicators.Length; k++)
						{
							self._indicatorTimestamps[k].hitTimeStamp = FixedTimeStamp.now;
							self._indicatorTimestamps[k].isActive = true;
						}
					}
				}
			};
			<>c.<>9__0_1 = val2;
			obj2 = (object)val2;
		}
		DamageIndicator.OnClientDamage += (hook_OnClientDamage)obj2;
		object obj3 = <>c.<>9__0_2;
		if (obj3 == null)
		{
			hook_OnRenderImage val3 = delegate(orig_OnRenderImage orig, DamageIndicator self, RenderTexture source, RenderTexture destination)
			{
				//IL_015e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0084: Unknown result type (might be due to invalid IL or missing references)
				//IL_0089: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)self.cameraRigController) && Object.op_Implicit((Object)(object)self.cameraRigController.target))
				{
					float num = 1f;
					HealthComponent component = self.cameraRigController.target.GetComponent<HealthComponent>();
					if (Object.op_Implicit((Object)(object)component))
					{
						num = Mathf.Clamp(component.health / component.fullHealth, 0f, 1f);
					}
					if (num <= 0.25f)
					{
						self._indicatorValue = 0.75f;
						for (int i = 0; i < self.indicators.Length; i++)
						{
							self._indicatorTimestamps[i].hitTimeStamp = FixedTimeStamp.now;
							self._indicatorTimestamps[i].isActive = true;
						}
					}
				}
				if (Mathf.Approximately(self._indicatorValue, 0f))
				{
					if (self.isEnabled)
					{
						self.ResetIndicators();
						self.mat.SetVectorArray("_Indicators", self.indicators);
						self.isEnabled = false;
					}
					Graphics.Blit((Texture)(object)source, destination, self.mat);
				}
				else
				{
					if (!self.isEnabled)
					{
						self.isEnabled = true;
					}
					self.mat.SetFloat("_BoxCornerRadius", self.boxCornerRadius);
					self.mat.SetFloat("_BoxFeather", self.boxFeather);
					self.mat.SetFloat("_BoxSize", self.GetBoxSize(self._indicatorValue));
					self.mat.SetColor("_TintColor", self.tintColor);
					self.mat.SetFloat("_IndicatorRadius", self.indicatorRadius);
					self.mat.SetFloat("_IndicatorFeather", self.indicatorFeather);
					for (int j = 0; j < self._indicatorTimestamps.Length; j++)
					{
						if (self._indicatorTimestamps[j].isActive)
						{
							float timeSince = ((FixedTimeStamp)(ref self._indicatorTimestamps[j].hitTimeStamp)).timeSince;
							if ((double)timeSince >= (double)self.indicatorDuration)
							{
								self._indicatorTimestamps[j].isActive = false;
							}
							else
							{
								self.indicators[j].z = Mathf.Clamp(self.indicatorOpacity.Evaluate(timeSince / self.indicatorDuration), 0f, 1f);
							}
						}
					}
					self.mat.SetVectorArray("_Indicators", self.indicators);
					Graphics.Blit((Texture)(object)source, destination, self.mat);
				}
			};
			<>c.<>9__0_2 = val3;
			obj3 = (object)val3;
		}
		DamageIndicator.OnRenderImage += (hook_OnRenderImage)obj3;
	}
}