Decompiled source of UFoxSettingsCore v1.0.1

UFoxSettingsCore.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using TFBGames;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(/*Could not decode attribute arguments.*/)]
[assembly: TargetFramework(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
[assembly: AssemblyCompany("UFoxSettingsCore")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("UFoxSettingsCore")]
[assembly: AssemblyTitle("UFoxSettingsCore")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace UFoxSettingsCore;

public enum CATEGORY
{
	BUG,
	VIDEO,
	AUDIO,
	CONTROLS,
	GAMEPLAY,
	TWITCH
}
public enum LOCALIZENAME
{
	DO,
	DONT
}
[Serializable]
public class UFoxSettingInstance
{
	public CATEGORY m_category;

	public LOCALIZENAME m_doLocalizeName;

	public SettingsType m_buttonType;

	public string m_key;

	public string m_tooltip;

	public float m_defaultValue;

	public string[] m_options = null;

	public float m_min = 0f;

	public float m_max = 1f;
}
[BepInPlugin("terren.UFoxSettingsCore", "UFoxSettingsCore", "1.0.0")]
public class UFoxSettingsInit : BaseUnityPlugin
{
	[CompilerGenerated]
	private sealed class <WaitForService>d__1 : global::System.Collections.Generic.IEnumerator<object>, global::System.Collections.IEnumerator, global::System.IDisposable
	{
		private int <>1__state;

		private object <>2__current;

		public UFoxSettingsInit <>4__this;

		object global::System.Collections.Generic.IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

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

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

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

		private bool MoveNext()
		{
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Expected O, but got Unknown
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				<>2__current = (object)new WaitUntil((Func<bool>)(() => (Object)(object)Object.FindObjectOfType<ServiceLocator>() != (Object)null));
				<>1__state = 1;
				return true;
			case 1:
				<>1__state = -1;
				<>2__current = (object)new WaitUntil((Func<bool>)(() => ServiceLocator.GetService<ISaveLoaderService>() != null));
				<>1__state = 2;
				return true;
			case 2:
				<>1__state = -1;
				<>2__current = (object)new WaitUntil((Func<bool>)(() => ServiceLocator.GetService<SettingsProfileManager>() != null));
				<>1__state = 3;
				return true;
			case 3:
				<>1__state = -1;
				Debug.Log((object)"--- UFoxSettingsCore: Initialized!");
				if (_debugMode)
				{
					<>4__this.ExampleSetting();
				}
				return false;
			}
		}

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

		[DebuggerHidden]
		void global::System.Collections.IEnumerator.Reset()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			throw new NotSupportedException();
		}
	}

	public static ConfigEntry<bool> exampleConfigEntry;

	public static bool _debugMode;

	private void Awake()
	{
		((MonoBehaviour)this).StartCoroutine(WaitForService());
	}

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

	private void ExampleSetting()
	{
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		exampleConfigEntry = UFoxSettingsUtility.BindBepinexConfig((BaseUnityPlugin)(object)this, CATEGORY.GAMEPLAY, "Test Entry", defaultBoolValue: false, "This modded setting does absolutely nothing!");
		UFoxSettingInstance uFoxSettingInstance = new UFoxSettingInstance();
		uFoxSettingInstance.m_category = CATEGORY.GAMEPLAY;
		uFoxSettingInstance.m_doLocalizeName = LOCALIZENAME.DO;
		uFoxSettingInstance.m_buttonType = (SettingsType)0;
		uFoxSettingInstance.m_key = "UFoxSetting Example Setting";
		uFoxSettingInstance.m_tooltip = "This modded setting does absolutely nothing!";
		uFoxSettingInstance.m_defaultValue = 0f;
		uFoxSettingInstance.m_options = new string[2] { "LABEL_DISABLED", "LABEL_ENABLED" };
		uFoxSettingInstance.m_min = 0f;
		uFoxSettingInstance.m_max = 1f;
		UFoxSettingInstance settingInstance = uFoxSettingInstance;
		UFoxSettingsUtility.CreateSetting(settingInstance, exampleConfigEntry).OnValueChanged += Dummy_OnValueChanged;
	}

	public static void Dummy_OnValueChanged(int value)
	{
		Debug.Log((object)("--- UFOXSETTINGS EXAMPLE: VALUE CHANGED TO " + value));
	}
}
public static class UFoxSettingsUtility
{
	public static ConfigEntry<bool> BindBepinexConfig(BaseUnityPlugin modPluginClass, CATEGORY category, string configEntryName, bool defaultBoolValue, string description)
	{
		string text = "Gameplay";
		switch (category)
		{
		case CATEGORY.BUG:
			text = "Bug";
			break;
		case CATEGORY.VIDEO:
			text = "Video";
			break;
		case CATEGORY.AUDIO:
			text = "Audio";
			break;
		case CATEGORY.CONTROLS:
			text = "Controls";
			break;
		case CATEGORY.TWITCH:
			text = "Twitch";
			break;
		}
		return modPluginClass.Config.Bind<bool>(text, configEntryName, defaultBoolValue, description);
	}

	public static ConfigEntry<int> BindBepinexConfig(BaseUnityPlugin modPluginClass, CATEGORY category, string configEntryName, int defaultIntValue, string description)
	{
		string text = "Gameplay";
		switch (category)
		{
		case CATEGORY.BUG:
			text = "Bug";
			break;
		case CATEGORY.VIDEO:
			text = "Video";
			break;
		case CATEGORY.AUDIO:
			text = "Audio";
			break;
		case CATEGORY.CONTROLS:
			text = "Controls";
			break;
		case CATEGORY.TWITCH:
			text = "Twitch";
			break;
		}
		return modPluginClass.Config.Bind<int>(text, configEntryName, defaultIntValue, description);
	}

	public static SettingsInstance CreateSetting(UFoxSettingInstance _settingInstance, ConfigEntry<bool> _config)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		return CreateSettingInternal(_settingInstance.m_doLocalizeName, _settingInstance.m_buttonType, _settingInstance.m_category, _settingInstance.m_key, _settingInstance.m_tooltip, _settingInstance.m_defaultValue, (!_config.Value) ? 1 : 0, _settingInstance.m_options, _settingInstance.m_min, _settingInstance.m_max);
	}

	private static SettingsInstance CreateSettingInternal(LOCALIZENAME doLocalizeName, SettingsType type, CATEGORY category, string key, string tooltip, float defaultValue, float currentValue, string[] options = null, float min = 0f, float max = 1f)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: 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)
		//IL_0017: 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_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: 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_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Expected O, but got Unknown
		SettingsInstance val = new SettingsInstance
		{
			localizeOptions = (doLocalizeName == LOCALIZENAME.DO),
			settingsType = type,
			m_settingsKey = key,
			toolTip = tooltip,
			options = options,
			defaultValue = (int)defaultValue,
			currentValue = (int)currentValue,
			defaultSliderValue = defaultValue,
			currentSliderValue = currentValue,
			min = min,
			max = max
		};
		GlobalSettingsHandler service = ServiceLocator.GetService<GlobalSettingsHandler>();
		SettingsInstance[] array = (SettingsInstance[])(object)new SettingsInstance[0];
		switch (category)
		{
		case CATEGORY.BUG:
			array = service.BugsSettings;
			break;
		case CATEGORY.VIDEO:
			array = service.VideoSettings;
			break;
		case CATEGORY.AUDIO:
			array = service.AudioSettings;
			break;
		case CATEGORY.CONTROLS:
			array = service.ControlSettings;
			break;
		case CATEGORY.GAMEPLAY:
			array = service.GameplaySettings;
			break;
		case CATEGORY.TWITCH:
			array = service.GameplaySettings;
			break;
		}
		List<SettingsInstance> val2 = Enumerable.ToList<SettingsInstance>((global::System.Collections.Generic.IEnumerable<SettingsInstance>)array);
		val2.Add(val);
		switch (category)
		{
		case CATEGORY.BUG:
			typeof(GlobalSettingsHandler).GetField("m_bugsSettings", (BindingFlags)36).SetValue((object)service, (object)val2.ToArray());
			break;
		case CATEGORY.VIDEO:
			typeof(GlobalSettingsHandler).GetField("m_videoSettings", (BindingFlags)36).SetValue((object)service, (object)val2.ToArray());
			break;
		case CATEGORY.AUDIO:
			typeof(GlobalSettingsHandler).GetField("m_audioSettings", (BindingFlags)36).SetValue((object)service, (object)val2.ToArray());
			break;
		case CATEGORY.CONTROLS:
			typeof(GlobalSettingsHandler).GetField("m_controlSettings", (BindingFlags)36).SetValue((object)service, (object)val2.ToArray());
			break;
		case CATEGORY.GAMEPLAY:
			typeof(GlobalSettingsHandler).GetField("m_gameplaySettings", (BindingFlags)36).SetValue((object)service, (object)val2.ToArray());
			break;
		case CATEGORY.TWITCH:
			typeof(GlobalSettingsHandler).GetField("m_gameplaySettings", (BindingFlags)36).SetValue((object)service, (object)val2.ToArray());
			break;
		}
		return val;
	}
}