Decompiled source of REPOChallenger v1.2.2

BpeInEx/plugins/REPOChallengerMod/REPOChallenger.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Photon.Pun;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("REPOChallenger")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("REPOChallenger")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("d2844401-0171-4b10-9d0c-70ebdae69925")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
public static class ChallengerConfig
{
	public static ConfigEntry<float> BudgetPercent;

	public static ConfigEntry<float> SpinWheelDuration;

	public static ConfigEntry<float> TimeToDisplayResult;

	public static void SetRandomPercentValue()
	{
		int num = Random.Range(0, 10);
		int num2 = num * 10;
		BudgetPercent.Value = num2;
	}

	public static void Init(ConfigFile config)
	{
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Expected O, but got Unknown
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Expected O, but got Unknown
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Expected O, but got Unknown
		BudgetPercent = config.Bind<float>("Shop - Tax Wheel", "BudgetPercent", 80f, new ConfigDescription("Pourcentage de l'argent utilisable dans le shop", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1] { "HideFromREPOConfig" }));
		SetRandomPercentValue();
		SpinWheelDuration = config.Bind<float>("Shop - Tax Wheel", "Spin Wheel Duration", 2f, new ConfigDescription("The duration of the spining wheel.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
		TimeToDisplayResult = config.Bind<float>("Shop - Tax Wheel", "Time To Display Result", 3f, new ConfigDescription("The duration for which the result is displayed.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
	}
}
public class PluginSyncManager : MonoBehaviourPun
{
	private static PluginSyncManager _instance;

	public static PluginSyncManager Instance
	{
		get
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			if ((Object)(object)_instance == (Object)null)
			{
				GameObject val = new GameObject("PluginSyncManager");
				Object.DontDestroyOnLoad((Object)(object)val);
				_instance = val.AddComponent<PluginSyncManager>();
				PhotonView val2 = val.AddComponent<PhotonView>();
				val2.ViewID = 999;
				PhotonNetwork.RegisterPhotonView(val2);
			}
			return _instance;
		}
	}

	public void BroadcastTaxPercent(float percent, int shopCurrency)
	{
		if (!PhotonNetwork.IsMasterClient)
		{
			Plugin.Log.LogWarning((object)"Only host can broadcast the percentage !");
			return;
		}
		((MonoBehaviourPun)this).photonView.RPC("ReceiveTaxPercent", (RpcTarget)0, new object[2] { percent, shopCurrency });
	}

	[PunRPC]
	private void ReceiveTaxPercent(float percent, int shopCurrency)
	{
		Plugin.Log.LogInfo((object)$"[BudgetSync] Percent : {percent}% (Shop currency : {shopCurrency})");
		ChallengerConfig.BudgetPercent.Value = percent;
		TaxWheelUI.Instance.ShowTaxWheel(shopCurrency);
	}
}
[HarmonyPatch(typeof(SteamManager), "OnLobbyEntered")]
public class OnLobbyEnteredPatch
{
	private static void Postfix()
	{
		Plugin.Log.LogInfo((object)"[REPOChallenger - PluginSyncManager] Lobby entered, initializing PluginSyncManager...");
		_ = PluginSyncManager.Instance;
	}
}
public class TaxWheelUI : MonoBehaviour
{
	[CompilerGenerated]
	private sealed class <FlashResult>d__19 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public TaxWheelUI <>4__this;

		private float <taxPercent>5__1;

		private int <i>5__2;

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

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

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

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

		private bool MoveNext()
		{
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Expected O, but got Unknown
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Expected O, but got Unknown
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_020b: Expected O, but got Unknown
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				SoundManagerMod.Instance.PlayReveal();
				<taxPercent>5__1 = <>4__this._percent * 100f;
				<i>5__2 = 0;
				goto IL_0181;
			case 1:
				<>1__state = -1;
				((Graphic)<>4__this._currencyText).color = new Color(1f, 0.85f, 0.2f);
				((Graphic)<>4__this._percentText).color = new Color(1f, 0.85f, 0.2f);
				<>2__current = (object)new WaitForSeconds(0.1f);
				<>1__state = 2;
				return true;
			case 2:
				<>1__state = -1;
				<i>5__2++;
				goto IL_0181;
			case 3:
				{
					<>1__state = -1;
					<>4__this.Hide();
					return false;
				}
				IL_0181:
				if (<i>5__2 < 3)
				{
					<>4__this._currencyText.text = $"${<>4__this._newCurrency:N0}k";
					<>4__this._percentText.text = $"{<taxPercent>5__1:0}%";
					((Graphic)<>4__this._currencyText).color = Color.white;
					((Graphic)<>4__this._percentText).color = Color.white;
					<>2__current = (object)new WaitForSeconds(0.1f);
					<>1__state = 1;
					return true;
				}
				((Graphic)<>4__this._currencyText).color = new Color(1f, 0.3f, 0.3f);
				((Graphic)<>4__this._percentText).color = new Color(1f, 0.3f, 0.3f);
				PunManager.instance.SetRunStatSet("currency", <>4__this._newCurrency);
				<>2__current = (object)new WaitForSeconds(ChallengerConfig.TimeToDisplayResult.Value);
				<>1__state = 3;
				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();
		}
	}

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

		private object <>2__current;

		public float duration;

		public TaxWheelUI <>4__this;

		private float <rotSpeed>5__1;

		private int <segmentIndex>5__2;

		private float <segmentAngle>5__3;

		private float <targetAngle>5__4;

		private float <currentAngle>5__5;

		private float <angleDiff>5__6;

		private float <totalRotationPhase2>5__7;

		private float <rotated>5__8;

		private float <finalAngle>5__9;

		private float <delta>5__10;

		private float <elapsed>5__11;

		private float <remaining>5__12;

		private float <t>5__13;

		private float <step>5__14;

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

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

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

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

		private bool MoveNext()
		{
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02df: Unknown result type (might be due to invalid IL or missing references)
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				<>4__this._isSpinning = true;
				<rotSpeed>5__1 = Mathf.RoundToInt(Random.Range(1350f, 1800f));
				<segmentIndex>5__2 = (int)ChallengerConfig.BudgetPercent.Value / 10;
				<segmentAngle>5__3 = 36f;
				<targetAngle>5__4 = (float)<segmentIndex>5__2 * <segmentAngle>5__3 % 360f;
				<elapsed>5__11 = 0f;
				goto IL_013d;
			case 1:
				<>1__state = -1;
				<elapsed>5__11 += Time.deltaTime;
				goto IL_013d;
			case 2:
				<>1__state = -1;
				goto IL_02bc;
			case 3:
				{
					<>1__state = -1;
					return false;
				}
				IL_013d:
				if (<elapsed>5__11 < duration)
				{
					if (Time.time > <>4__this.nextTickTime)
					{
						SoundManagerMod.Instance.PlayTick();
						<>4__this.nextTickTime = Time.time + <segmentAngle>5__3 / <rotSpeed>5__1;
					}
					((Transform)<>4__this._wheelTransform).Rotate(0f, 0f, <rotSpeed>5__1 * Time.deltaTime);
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				<currentAngle>5__5 = ((Transform)<>4__this._wheelTransform).eulerAngles.z % 360f;
				<angleDiff>5__6 = (<targetAngle>5__4 - <currentAngle>5__5) % 360f;
				<totalRotationPhase2>5__7 = 1080f + <angleDiff>5__6;
				<rotated>5__8 = 0f;
				goto IL_02bc;
				IL_02bc:
				if (<rotated>5__8 < <totalRotationPhase2>5__7)
				{
					<remaining>5__12 = <totalRotationPhase2>5__7 - <rotated>5__8;
					<t>5__13 = <remaining>5__12 / <totalRotationPhase2>5__7;
					<rotSpeed>5__1 = Mathf.Lerp(0f, 1800f, <t>5__13);
					<rotSpeed>5__1 = Mathf.Max(<rotSpeed>5__1, 10f);
					if (Time.time > <>4__this.nextTickTime)
					{
						SoundManagerMod.Instance.PlayTick();
						<>4__this.nextTickTime = Time.time + <segmentAngle>5__3 / <rotSpeed>5__1;
					}
					<step>5__14 = <rotSpeed>5__1 * Time.deltaTime;
					<step>5__14 = Mathf.Min(<step>5__14, <remaining>5__12);
					((Transform)<>4__this._wheelTransform).Rotate(0f, 0f, <step>5__14);
					<rotated>5__8 += <step>5__14;
					<>2__current = null;
					<>1__state = 2;
					return true;
				}
				<finalAngle>5__9 = ((Transform)<>4__this._wheelTransform).eulerAngles.z;
				<delta>5__10 = Mathf.DeltaAngle(<finalAngle>5__9, <targetAngle>5__4);
				if (Mathf.Abs(<delta>5__10) < 5f)
				{
					((Transform)<>4__this._wheelTransform).Rotate(0f, 0f, <delta>5__10);
				}
				<>4__this._isSpinning = false;
				<>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.FlashResult());
				<>1__state = 3;
				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 static TaxWheelUI _instance;

	private GameObject _uiRoot;

	private RectTransform _wheelTransform;

	private TMP_Text _currentCurrencyText;

	private TMP_Text _currencyText;

	private TMP_Text _percentText;

	private int _newCurrency;

	private float _percent;

	private bool _isVisible = false;

	private bool _isSpinning = false;

	private Coroutine _spinWheelCoroutine;

	private float nextTickTime = 0f;

	public static TaxWheelUI Instance
	{
		get
		{
			if ((Object)(object)_instance == (Object)null || (Object)(object)((Component)_instance).gameObject == (Object)null)
			{
				Create();
			}
			return _instance;
		}
	}

	public bool IsVisible => _isVisible;

	public bool IsSpinning => _isSpinning;

	private void Update()
	{
		if (SemiFunc.RunIsShop() && _isVisible)
		{
			SemiFunc.InputDisableMovement();
			SemiFunc.InputDisableAiming();
			SemiFunc.CursorUnlock(0.1f);
		}
	}

	public static void Create()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		GameObject val = new GameObject("ShopBudgetUI");
		Object.DontDestroyOnLoad((Object)(object)val);
		_instance = val.AddComponent<TaxWheelUI>();
		_instance.LoadFromBundle();
	}

	private void LoadFromBundle()
	{
		string text = Path.Combine(Path.GetDirectoryName(typeof(Plugin).Assembly.Location), "UIs/taxwheelbundle");
		if (!File.Exists(text))
		{
			Debug.LogError((object)("Bundle d'UI introuvable à l'emplacement : " + text));
			return;
		}
		AssetBundle val = AssetBundle.LoadFromFile(text);
		if ((Object)(object)val == (Object)null)
		{
			Debug.LogError((object)("Échec du chargement du bundle d'UI depuis : " + text));
			return;
		}
		GameObject val2 = val.LoadAsset<GameObject>("TaxWheelCanvas");
		if ((Object)(object)val2 == (Object)null)
		{
			Debug.LogError((object)"Prefab 'TaxWheelCanvas' introuvable dans le bundle !");
			val.Unload(false);
			return;
		}
		_uiRoot = Object.Instantiate<GameObject>(val2);
		Canvas component = _uiRoot.GetComponent<Canvas>();
		component.renderMode = (RenderMode)0;
		component.sortingOrder = 1;
		_currencyText = ((Component)_uiRoot.transform.Find("Panel/ResultGroup/HorizontalGroupResult/textCurrencyValue")).GetComponent<TMP_Text>();
		_currentCurrencyText = ((Component)_uiRoot.transform.Find("Panel/ResultGroup/HorizontalGroupResult/textCurrentCurrencyValue")).GetComponent<TMP_Text>();
		_percentText = ((Component)_uiRoot.transform.Find("Panel/ResultGroup/HorizontalGroupResult/textPercentValue")).GetComponent<TMP_Text>();
		_wheelTransform = ((Component)_uiRoot.transform.Find("Panel/WheelContainer/WheelBase")).GetComponent<RectTransform>();
		_uiRoot.SetActive(false);
		val.Unload(false);
		Debug.Log((object)"UI chargée depuis l'asset bundle ✓");
	}

	public void ShowTaxWheel(int totalMoney)
	{
		if ((Object)(object)_uiRoot == (Object)null || (Object)(object)_currencyText == (Object)null || (Object)(object)_percentText == (Object)null)
		{
			Plugin.Log.LogWarning((object)"UI perdue entre les scènes, rechargement...");
			LoadFromBundle();
		}
		_percent = ChallengerConfig.BudgetPercent.Value / 100f;
		_newCurrency = Mathf.RoundToInt((float)totalMoney * (1f - _percent));
		_currentCurrencyText.text = $"${totalMoney}k";
		_currencyText.text = "$...k";
		_percentText.text = "...%";
		_uiRoot.SetActive(true);
		_isVisible = true;
		if (_spinWheelCoroutine != null)
		{
			((MonoBehaviour)this).StopCoroutine(_spinWheelCoroutine);
		}
		float value = ChallengerConfig.SpinWheelDuration.Value;
		_spinWheelCoroutine = ((MonoBehaviour)this).StartCoroutine(SpinWheel(value));
	}

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

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

	public void Hide()
	{
		_uiRoot.SetActive(false);
		_isVisible = false;
		SemiFunc.CursorUnlock(0f);
	}
}
[BepInPlugin("com.nolex.repochallenger", "REPO Challenger", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
	public static ManualLogSource Log;

	public static Plugin Instance;

	private Harmony _harmony;

	private void Awake()
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Expected O, but got Unknown
		Instance = this;
		Log = ((BaseUnityPlugin)this).Logger;
		ChallengerConfig.Init(((BaseUnityPlugin)this).Config);
		((BaseUnityPlugin)this).Logger.LogInfo((object)"[REPO Challenger] mod is initializing...");
		Harmony val = new Harmony("com.nolex.repochallenger");
		val.PatchAll();
		SceneManager.sceneLoaded += OnSceneLoaded;
	}

	private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
	{
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Expected O, but got Unknown
		((BaseUnityPlugin)this).Logger.LogInfo((object)("[REPO Challenger] Scene loaded: " + ((Scene)(ref scene)).name));
		if ((Object)(object)GameObject.Find("REPOChallengerModHandler") == (Object)null)
		{
			GameObject val = new GameObject("REPOChallengerModHandler");
			val.AddComponent<REPOChallengerModHandler>();
			Object.DontDestroyOnLoad((Object)(object)val);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[REPO Challenger] Mod handler created and set to not destroy on load.");
		}
	}
}
public class REPOChallengerModHandler : MonoBehaviour
{
	private bool levelInitialized = false;

	private object levelGeneratorInstance = null;

	private Type levelGeneratorType = null;

	private void Update()
	{
		if (!levelInitialized && TryGetLevelGeneratorInstance(out levelGeneratorInstance, out levelGeneratorType))
		{
			FieldInfo field = levelGeneratorInstance.GetField("Generated", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (field != null && (bool)field.GetValue(levelGeneratorInstance))
			{
				levelInitialized = true;
				Debug.Log((object)"[REPO Challenger] Level generator detected and level is generated.");
			}
		}
	}

	private void KeyInputsHandler()
	{
		if (Input.GetKeyDown((KeyCode)273) || Input.GetKeyDown((KeyCode)274))
		{
			int runStatCurrency = StatsManager.instance.GetRunStatCurrency();
			int num = (Input.GetKeyDown((KeyCode)273) ? (runStatCurrency + 10) : (runStatCurrency - 10));
			SemiFunc.StatSetRunCurrency(num);
		}
		if (Input.GetKeyDown((KeyCode)112))
		{
			RunManager.instance.ChangeLevel(true, false, (ChangeLevelType)5);
		}
	}

	private bool TryGetLevelGeneratorInstance(out object levelGeneratorInstance, out Type levelGeneratorType)
	{
		levelGeneratorInstance = null;
		levelGeneratorType = null;
		Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
		Assembly[] array = assemblies;
		foreach (Assembly assembly in array)
		{
			Type[] types = assembly.GetTypes();
			Type[] array2 = types;
			foreach (Type type in array2)
			{
				if (type.Name == "LevelGenerator")
				{
					levelGeneratorType = type;
					levelGeneratorInstance = Object.FindObjectOfType(levelGeneratorType);
					if (levelGeneratorInstance != null)
					{
						return true;
					}
				}
			}
		}
		return false;
	}
}
public static class ReflectionExtensions
{
	public static FieldInfo GetField(this object obj, string fieldName, BindingFlags bindingFlags)
	{
		if (obj == null)
		{
			throw new ArgumentNullException("obj");
		}
		Type type = obj.GetType();
		return type.GetField(fieldName, bindingFlags);
	}
}
[HarmonyPatch(typeof(LoadingUI), "StopLoading")]
public class ShopOpenPatch
{
	private static void Postfix(ShopManager __instance)
	{
		if (!SemiFunc.RunIsShop())
		{
			return;
		}
		int runStatCurrency = StatsManager.instance.GetRunStatCurrency();
		ChallengerConfig.SetRandomPercentValue();
		if (!PhotonNetwork.IsConnected || PhotonNetwork.CurrentRoom == null)
		{
			Plugin.Log.LogInfo((object)"Shop open in solo ! Tax wheel displayed.");
			TaxWheelUI.Instance.ShowTaxWheel(runStatCurrency);
			return;
		}
		PlayerAvatar localPlayer = GetLocalPlayer();
		if ((Object)(object)localPlayer == (Object)null)
		{
			Plugin.Log.LogWarning((object)"Local player not found !");
			return;
		}
		PhotonView component = ((Component)localPlayer).GetComponent<PhotonView>();
		if (!((Object)(object)component != (Object)null) || component.IsMine)
		{
			if (PhotonNetwork.IsMasterClient)
			{
				float value = ChallengerConfig.BudgetPercent.Value;
				PluginSyncManager.Instance.BroadcastTaxPercent(value, runStatCurrency);
				Plugin.Log.LogInfo((object)"Shop open ! Tax Wheel displayed.");
			}
			else
			{
				Plugin.Log.LogInfo((object)"[Client] Waiting host's percentage...");
			}
		}
	}

	private static PlayerAvatar GetLocalPlayer()
	{
		PlayerAvatar[] array = Object.FindObjectsOfType<PlayerAvatar>();
		foreach (PlayerAvatar val in array)
		{
			PhotonView component = ((Component)val).GetComponent<PhotonView>();
			if ((Object)(object)component != (Object)null && component.IsMine)
			{
				return val;
			}
		}
		return null;
	}
}
public class SoundManagerMod : MonoBehaviour
{
	[CompilerGenerated]
	private sealed class <LoadClip>d__9 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public string fileName;

		public Action<AudioClip> onLoaded;

		public SoundManagerMod <>4__this;

		private string <fullPath>5__1;

		private AudioType <type>5__2;

		private UnityWebRequest <request>5__3;

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

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

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

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			int num = <>1__state;
			if (num == -3 || num == 1)
			{
				try
				{
				}
				finally
				{
					<>m__Finally1();
				}
			}
			<fullPath>5__1 = null;
			<request>5__3 = null;
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<fullPath>5__1 = Path.Combine(<>4__this._soundsPath, fileName);
					if (!File.Exists(<fullPath>5__1))
					{
						Debug.LogWarning((object)("Son introuvable : " + <fullPath>5__1));
						return false;
					}
					<type>5__2 = (AudioType)(fileName.EndsWith(".ogg") ? 14 : 20);
					<request>5__3 = UnityWebRequestMultimedia.GetAudioClip("file://" + <fullPath>5__1, <type>5__2);
					<>1__state = -3;
					<>2__current = <request>5__3.SendWebRequest();
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -3;
					onLoaded(DownloadHandlerAudioClip.GetContent(<request>5__3));
					<>m__Finally1();
					<request>5__3 = null;
					return false;
				}
			}
			catch
			{
				//try-fault
				((IDisposable)this).Dispose();
				throw;
			}
		}

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

		private void <>m__Finally1()
		{
			<>1__state = -1;
			if (<request>5__3 != null)
			{
				((IDisposable)<request>5__3).Dispose();
			}
		}

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

	private static SoundManagerMod _instance;

	private AudioSource _audioSource;

	private AudioClip _tickSound;

	private AudioClip _revealSound;

	public static SoundManagerMod Instance
	{
		get
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			if ((Object)(object)_instance == (Object)null)
			{
				GameObject val = new GameObject("ShopBudgetSound");
				Object.DontDestroyOnLoad((Object)(object)val);
				_instance = val.AddComponent<SoundManagerMod>();
			}
			return _instance;
		}
	}

	private string _soundsPath => Path.Combine(Path.GetDirectoryName(typeof(Plugin).Assembly.Location), "Sounds");

	private void Awake()
	{
		_audioSource = ((Component)this).gameObject.AddComponent<AudioSource>();
		((MonoBehaviour)this).StartCoroutine(LoadClip("tick.wav", delegate(AudioClip clip)
		{
			_tickSound = clip;
		}));
		((MonoBehaviour)this).StartCoroutine(LoadClip("reveal.wav", delegate(AudioClip clip)
		{
			_revealSound = clip;
		}));
	}

	[IteratorStateMachine(typeof(<LoadClip>d__9))]
	private IEnumerator LoadClip(string fileName, Action<AudioClip> onLoaded)
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <LoadClip>d__9(0)
		{
			<>4__this = this,
			fileName = fileName,
			onLoaded = onLoaded
		};
	}

	public void PlayTick()
	{
		_audioSource.PlayOneShot(_tickSound);
	}

	public void PlayReveal()
	{
		_audioSource.PlayOneShot(_revealSound);
	}
}