Decompiled source of DarkenEmptyChests v1.0.1

DarkenEmptyChests.dll

Decompiled 43 minutes ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Barrel;
using On.EntityStates.Barrel;
using On.RoR2;
using RoR2;
using UnityEngine;
using UnityEngine.Networking;

[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("DarkenEmptyChests")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+cbd779ea0061b9e41b5c6092601d8323b2a1fd32")]
[assembly: AssemblyProduct("DarkenEmptyChests")]
[assembly: AssemblyTitle("DarkenEmptyChests")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace DarkenEmptyChests;

[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("icejaw.darkenemptychests", "Darken Empty Chests", "1.0.0")]
public class DarkenEmptyChests : BaseUnityPlugin
{
	public static ConfigEntry<float> BrightnessMultiplier;

	public static ConfigEntry<float> FadeOutTime;

	public static ConfigEntry<bool> ShouldApplyToAdaptiveChests;

	private const float default_BrightnessMultiplier = 0.5f;

	private const float default_FadeOutTime = 1f;

	private const bool default_ShouldApplyToAdaptiveChests = false;

	internal static DarkenEmptyChests Instance;

	public void Awake()
	{
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Expected O, but got Unknown
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: Expected O, but got Unknown
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Expected O, but got Unknown
		Instance = this;
		BrightnessMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("DarkenEmptyChests", "BrightnessMultiplier", 0.5f, "How much to darken empty containers. (0 = completely black, 1 = normal)");
		FadeOutTime = ((BaseUnityPlugin)this).Config.Bind<float>("DarkenEmptyChests", "FadeOutTime", 1f, "How long containers should take to fade out, in seconds.");
		ShouldApplyToAdaptiveChests = ((BaseUnityPlugin)this).Config.Bind<bool>("DarkenEmptyChests", "ShouldApplyToAdaptiveChests", false, "Whether adaptive chests should fade out after use.");
		Opened.OnEnter += new hook_OnEnter(On_Opened_OnEnter);
		DelusionChestController.ResetChestForDelusion += new hook_ResetChestForDelusion(On_DelusionChestController_ResetChestForDelusion);
		Opened.OnEnter += new hook_OnEnter(On_Opened_OnEnter);
	}

	internal static void Log(LogLevel level, object data)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		((BaseUnityPlugin)Instance).Logger.Log(level, data);
	}

	private void On_Opened_OnEnter(orig_OnEnter orig, Opened self)
	{
		orig.Invoke(self);
		((Component)((EntityState)self).outer.commonComponents.modelLocator.modelTransform).gameObject.AddComponent<FadeObject>();
	}

	private void On_Opened_OnEnter(orig_OnEnter orig, EntityState self)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		orig.Invoke((Opened)self);
		if (ShouldApplyToAdaptiveChests.Value && NetworkServer.active)
		{
			Transform modelTransform = self.outer.commonComponents.modelLocator.modelTransform;
			((Component)modelTransform.GetChild(0)).gameObject.AddComponent<FadeObject>();
			((Component)modelTransform.GetChild(1)).gameObject.AddComponent<FadeObject>();
		}
	}

	private void On_DelusionChestController_ResetChestForDelusion(orig_ResetChestForDelusion orig, DelusionChestController self)
	{
		orig.Invoke(self);
		FadeObject component = ((Component)((Component)self).gameObject.GetComponent<ModelLocator>().modelTransform).GetComponent<FadeObject>();
		if ((Object)(object)component != (Object)null)
		{
			Object.Destroy((Object)(object)component);
		}
	}
}
public class FadeObject : MonoBehaviour
{
	[CompilerGenerated]
	private sealed class <InterpolateBrightnessAndFade>d__11 : IEnumerator<object>, IEnumerator, IDisposable
	{
		private int <>1__state;

		private object <>2__current;

		public FadeObject <>4__this;

		private float <currentLerp>5__2;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <InterpolateBrightnessAndFade>d__11(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Expected O, but got Unknown
			int num = <>1__state;
			FadeObject fadeObject = <>4__this;
			switch (num)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				<currentLerp>5__2 = 0f;
				break;
			case 1:
				<>1__state = -1;
				break;
			}
			if (<currentLerp>5__2 <= 1f)
			{
				fadeObject.currentBrightness = Mathf.SmoothStep(1f, fadeObject.TargetBrightness, <currentLerp>5__2);
				<currentLerp>5__2 += Time.deltaTime / fadeObject.FadeOutTime;
				<>2__current = (object)new WaitForEndOfFrame();
				<>1__state = 1;
				return true;
			}
			return false;
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	[CompilerGenerated]
	private sealed class <WaitUntilVisible>d__12 : IEnumerator<object>, IEnumerator, IDisposable
	{
		private int <>1__state;

		private object <>2__current;

		public FadeObject <>4__this;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <WaitUntilVisible>d__12(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Expected O, but got Unknown
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Expected O, but got Unknown
			int num = <>1__state;
			FadeObject fadeObject = <>4__this;
			bool flag;
			switch (num)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				flag = false;
				goto IL_004f;
			case 1:
				<>1__state = -1;
				flag = fadeObject.RenderersAreVisible();
				goto IL_004f;
			case 2:
				{
					<>1__state = -1;
					fadeObject.RefreshRenderers();
					SceneCamera.onSceneCameraPreRender += new SceneCameraDelegate(fadeObject.OnSceneCameraPreRender);
					return false;
				}
				IL_004f:
				if (!flag)
				{
					<>2__current = (object)new WaitForEndOfFrame();
					<>1__state = 1;
					return true;
				}
				<>2__current = (object)new WaitForSecondsRealtime(0.05f);
				<>1__state = 2;
				return true;
			}
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	private Renderer[] renderers;

	private readonly List<Color> originalColors = new List<Color>();

	private float currentBrightness = 1f;

	private float TargetBrightness => DarkenEmptyChests.BrightnessMultiplier.Value;

	private float FadeOutTime => DarkenEmptyChests.FadeOutTime.Value;

	private void Start()
	{
		renderers = ((Component)this).gameObject.GetComponentsInChildren<Renderer>();
		((MonoBehaviour)this).StartCoroutine(WaitUntilVisible());
		((MonoBehaviour)this).StartCoroutine(InterpolateBrightnessAndFade());
	}

	private void OnDestroy()
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Expected O, but got Unknown
		SceneCamera.onSceneCameraPreRender -= new SceneCameraDelegate(OnSceneCameraPreRender);
		currentBrightness = 1f;
		OnSceneCameraPreRender(null);
	}

	private void RefreshRenderers()
	{
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		renderers = ((Component)this).gameObject.GetComponentsInChildren<Renderer>();
		originalColors.Clear();
		Renderer[] array = renderers;
		foreach (Renderer val in array)
		{
			originalColors.Add(val.material.color);
		}
	}

	private bool RenderersAreVisible()
	{
		bool result = true;
		Renderer[] array = renderers;
		foreach (Renderer val in array)
		{
			if ((Object)(object)val == (Object)null)
			{
				RefreshRenderers();
				DarkenEmptyChests.Log((LogLevel)16, "Renderers became null, refreshing reference to renderers");
				result = false;
				break;
			}
			if (!val.isVisible)
			{
				result = false;
				break;
			}
		}
		return result;
	}

	[IteratorStateMachine(typeof(<InterpolateBrightnessAndFade>d__11))]
	private IEnumerator InterpolateBrightnessAndFade()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <InterpolateBrightnessAndFade>d__11(0)
		{
			<>4__this = this
		};
	}

	[IteratorStateMachine(typeof(<WaitUntilVisible>d__12))]
	private IEnumerator WaitUntilVisible()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <WaitUntilVisible>d__12(0)
		{
			<>4__this = this
		};
	}

	private void OnSceneCameraPreRender(SceneCamera _)
	{
		//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_001c: Unknown result type (might be due to invalid IL or missing references)
		for (int i = 0; i < renderers.Length; i++)
		{
			Renderer renderer = renderers[i];
			Color color = originalColors[i];
			ChangeColor(renderer, color);
		}
	}

	private void ChangeColor(Renderer renderer, Color color)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		try
		{
			renderer.material.color = color * currentBrightness;
		}
		catch (NullReferenceException)
		{
			DarkenEmptyChests.Log((LogLevel)16, "Setting color failed, refreshing reference to renderers");
			RefreshRenderers();
		}
	}
}