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;
}
}