using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using JetBrains.Annotations;
using LeTai.Asset.TranslucentImage;
using Microsoft.CodeAnalysis;
using MonoMod.RuntimeDetour;
using RiskOfOptions.Components.AssetResolution;
using RiskOfOptions.Components.AssetResolution.Data;
using RiskOfOptions.Components.ColorPicker;
using RiskOfOptions.Components.Misc;
using RiskOfOptions.Components.Options;
using RiskOfOptions.Components.Panel;
using RiskOfOptions.Components.RuntimePrefabs;
using RiskOfOptions.Containers;
using RiskOfOptions.Lib;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RiskOfOptions.Resources;
using RiskOfOptions.Utils;
using RoR2;
using RoR2.UI;
using RoR2.UI.SkinControllers;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.TextCore;
using UnityEngine.UI;
[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("Rune580")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("2.8.5.0")]
[assembly: AssemblyInformationalVersion("2.8.5+8fd3064c380e9c685465d201281316e718478119")]
[assembly: AssemblyProduct("RiskOfOptions")]
[assembly: AssemblyTitle("RiskOfOptions")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/Rune580/RiskOfOptions")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace RiskOfOptions
{
internal static class ExtensionMethods
{
internal static IEnumerable<Type> GetValidTypes(this Assembly assembly)
{
try
{
return assembly.GetTypes();
}
catch (ReflectionTypeLoadException ex)
{
return ex.Types.Where((Type type) => (object)type != null);
}
}
internal static ModMetaData GetModMetaData(this Assembly assembly)
{
ModMetaData result = default(ModMetaData);
foreach (Type validType in assembly.GetValidTypes())
{
BepInPlugin customAttribute = ((MemberInfo)validType).GetCustomAttribute<BepInPlugin>();
if (customAttribute != null)
{
result.Guid = customAttribute.GUID;
result.Name = customAttribute.Name;
}
}
return result;
}
internal static float Remap(this float value, float fromMin, float fromMax, float toMin, float toMax)
{
float num = value - fromMin;
float num2 = fromMax - fromMin;
float num3 = num / num2;
return Mathf.Clamp((toMax - toMin) * num3 + toMin, toMin, toMax);
}
internal static T GetCopyOf<T>(this Component comp, T other) where T : Component
{
Type type = ((object)comp).GetType();
if (type != ((object)other).GetType())
{
return default(T);
}
BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
PropertyInfo[] properties = type.GetProperties(bindingAttr);
foreach (PropertyInfo propertyInfo in properties)
{
if (propertyInfo.CanWrite)
{
try
{
propertyInfo.SetValue(comp, propertyInfo.GetValue(other, null), null);
}
catch
{
}
}
}
FieldInfo[] fields = type.GetFields(bindingAttr);
foreach (FieldInfo fieldInfo in fields)
{
fieldInfo.SetValue(comp, fieldInfo.GetValue(other));
}
return (T)(object)((comp is T) ? comp : null);
}
internal static T AddComponent<T>(this GameObject go, T toAdd) where T : Component
{
return ((Component)(object)go.AddComponent<T>()).GetCopyOf(toAdd);
}
internal static T GetOrAddComponent<T>(this GameObject gameObject) where T : Component
{
T val = gameObject.GetComponent<T>();
if (!Object.op_Implicit((Object)(object)val))
{
val = gameObject.AddComponent<T>();
}
return val;
}
internal static bool CloseEnough(Vector2 a, Vector2 b)
{
//IL_0000: 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_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
if (Mathf.Abs(a.x - b.x) < 0.0001f)
{
return Mathf.Abs(a.y - b.y) < 0.0001f;
}
return false;
}
internal static bool CloseEnough(Color a, Color b)
{
//IL_0000: 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_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
if (Mathf.Abs(a.r - b.r) < 0.0001f && Mathf.Abs(a.g - b.g) < 0.0001f && Mathf.Abs(a.b - b.b) < 0.0001f)
{
return Mathf.Abs(a.a - b.a) < 0.0001f;
}
return false;
}
internal static bool CloseEnough(Color[] a, Color b)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < a.Length; i++)
{
_ = ref a[i];
if (!CloseEnough(a[i], b))
{
return false;
}
}
return true;
}
internal static Vector2 SmoothStep(Vector2 a, Vector2 b, float t)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
Vector2 zero = Vector2.zero;
zero.x = Mathf.SmoothStep(a.x, b.x, t);
zero.y = Mathf.SmoothStep(a.y, b.y, t);
return zero;
}
internal static double Abs(double num)
{
if (!(num < 0.0))
{
return num;
}
return -1.0 * num;
}
internal static double RoundUpToDecimalPlace(this double num, int place)
{
float num2 = Mathf.Pow(10f, (float)place);
num2 = ((num2 == 0f) ? 1f : num2);
return Mathf.Ceil((float)num * num2) / num2;
}
}
public static class KeyboardShortcutExtensions
{
public static bool IsPressedInclusive(this KeyboardShortcut key)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
bool flag = ((KeyboardShortcut)(ref key)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
return Input.GetKey(((KeyboardShortcut)(ref key)).MainKey) && flag;
}
}
internal static class LanguageTokens
{
public static readonly string OptionRebindDialogTitle = "RISK_OF_OPTIONS".ToUpper() + "_OPTION_REBIND_DIALOG_TITLE_TOKEN";
public static readonly string OptionRebindDialogDescription = "RISK_OF_OPTIONS".ToUpper() + "_OPTION_REBIND_DIALOG_DESCRIPTION_TOKEN";
public static readonly string LeftPageButton = "RISK_OF_OPTIONS".ToUpper() + "_LEFT_PAGE_BUTTON_TEXT_TOKEN;";
public static readonly string RightPageButton = "RISK_OF_OPTIONS".ToUpper() + "_RIGHT_PAGE_BUTTON_TEXT_TOKEN;";
public const string HeaderToken = "RISK_OF_OPTIONS_MOD_OPTIONS_HEADER_BUTTON_TEXT";
public const string NoModsHeaderToken = "RISK_OF_OPTIONS_NO_MODS_HEADER_TEXT";
public const string NoModsDescriptionToken = "RISK_OF_OPTIONS_NO_MODS_DESCRIPTION_TEXT";
public const string ModsHeaderToken = "RISK_OF_OPTIONS_MODS_HEADER_TEXT";
public const string ModsDescriptionToken = "RISK_OF_OPTIONS_DESCRIPTION_TEXT";
public const string DialogButtonToken = "RISK_OF_OPTIONS_NO_MODS_BUTTON_TEXT";
public static void Register()
{
LanguageApi.Add(OptionRebindDialogTitle, "Rebind Control...");
LanguageApi.Add(LeftPageButton, "<");
LanguageApi.Add(RightPageButton, ">");
LanguageApi.Add("RISK_OF_OPTIONS_NO_MODS_HEADER_TEXT", "No Supported Mods Installed");
LanguageApi.Add("RISK_OF_OPTIONS_NO_MODS_DESCRIPTION_TEXT", "No mods implementing RiskOfOptions found.\nThis mod doesn't do anything if you don't have any mods installed that supports RiskOfOptions.\nThis won't show again.");
LanguageApi.Add("RISK_OF_OPTIONS_MODS_HEADER_TEXT", "You can configure your mods in game!");
LanguageApi.Add("RISK_OF_OPTIONS_DESCRIPTION_TEXT", "Mods with support for RiskOfOptions found!\nYou can configure them in the \"MOD OPTIONS\" panel.\nThis won't show again");
LanguageApi.Add("RISK_OF_OPTIONS_NO_MODS_BUTTON_TEXT", "Ok");
}
}
public static class ModSettingsManager
{
private static Hook _pauseHook;
internal static readonly ModIndexedOptionCollection OptionCollection = new ModIndexedOptionCollection();
internal const string StartingText = "RISK_OF_OPTIONS";
internal const int StartingTextLength = 15;
internal static bool disablePause = false;
internal static readonly List<string> RestartRequiredOptions = new List<string>();
internal static void Init()
{
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Expected O, but got Unknown
LanguageApi.Init();
Assets.LoadAssets();
Prefabs.Init();
LanguageTokens.Register();
SettingsModifier.Init();
MethodInfo? method = typeof(PauseManager).GetMethod("CCTogglePause", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
MethodInfo method2 = typeof(ModSettingsManager).GetMethod("PauseManagerOnCCTogglePause", BindingFlags.Static | BindingFlags.NonPublic);
_pauseHook = new Hook((MethodBase)method, method2);
}
private static void PauseManagerOnCCTogglePause(Action<ConCommandArgs> orig, ConCommandArgs args)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
if (!disablePause)
{
orig(args);
}
}
public static void SetModDescription(string description)
{
ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
SetModDescription(description, modMetaData.Guid, modMetaData.Name);
}
public static void SetModDescription(string description, string modGuid, string modName)
{
EnsureContainerExists(modGuid, modName);
OptionCollection[modGuid].SetDescriptionText(description);
}
public static void SetModDescriptionToken(string descriptionToken)
{
ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
SetModDescriptionToken(descriptionToken, modMetaData.Guid, modMetaData.Name);
}
public static void SetModDescriptionToken(string descriptionToken, string modGuid, string modName)
{
EnsureContainerExists(modGuid, modName);
OptionCollection[modGuid].DescriptionToken = descriptionToken;
}
public static void SetModIcon(Sprite iconSprite)
{
ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
SetModIcon(iconSprite, modMetaData.Guid, modMetaData.Name);
}
public static void SetModIcon(Sprite iconSprite, string modGuid, string modName)
{
EnsureContainerExists(modGuid, modName);
OptionCollection[modGuid].icon = iconSprite;
}
public static void SetModIcon(GameObject iconPrefab)
{
ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
SetModIcon(iconPrefab, modMetaData.Guid, modMetaData.Name);
}
public static void SetModIcon(GameObject iconPrefab, string modGuid, string modName)
{
EnsureContainerExists(modGuid, modName);
OptionCollection[modGuid].iconPrefab = iconPrefab;
}
public static void AddOption(BaseOption option)
{
ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
AddOption(option, modMetaData.Guid, modMetaData.Name);
}
public static void AddOption(BaseOption option, string modGuid, string modName)
{
option.SetProperties();
option.ModGuid = modGuid;
option.ModName = modName;
option.Identifier = (modGuid + "." + option.Category + "." + option.Name + "." + option.OptionTypeName).Replace(" ", "_").ToUpper();
option.RegisterTokens();
OptionCollection.AddOption(ref option);
}
public static void AddOption(BaseOption option, string modGuid, string modName, string nameToken, string descriptionToken)
{
option.SetProperties();
option.ModGuid = modGuid;
option.ModName = modName;
option.NameToken = nameToken;
option.DescriptionToken = descriptionToken;
option.Identifier = (modGuid + "." + option.Category + "." + option.Name + "." + option.OptionTypeName).Replace(" ", "_").ToUpper();
if (option is ChoiceOption choiceOption)
{
choiceOption.RegisterChoiceTokens();
}
OptionCollection.AddOption(ref option);
}
private static void EnsureContainerExists(string modGuid, string modName)
{
if (!OptionCollection.ContainsModGuid(modGuid))
{
OptionCollection[modGuid] = new OptionCollection(modName, modGuid);
}
}
public static void SetCategoryNameToken(string modGuid, BaseOption option, string nameToken)
{
OptionCollection[modGuid][option.Category].SetNameToken(nameToken);
}
}
[BepInPlugin("com.rune580.riskofoptions", "RiskOfOptions", "2.8.5")]
public sealed class RiskOfOptionsPlugin : BaseUnityPlugin
{
internal static ConfigEntry<bool>? seenNoMods;
internal static ConfigEntry<bool>? seenMods;
public static ConfigEntry<DecimalSeparator>? decimalSeparator;
public static ConfigEntry<bool>? showModifiedIndicator;
public static ConfigEntry<Color>? nonDefaultModifiedColor;
public static ConfigEntry<Color>? hasChangedModifiedColor;
private void Awake()
{
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
seenNoMods = ((BaseUnityPlugin)this).Config.Bind<bool>("One Time Stuff", "Has seen the no mods prompt", false, (ConfigDescription)null);
seenMods = ((BaseUnityPlugin)this).Config.Bind<bool>("One Time Stuff", "Has seen the mods prompt", false, (ConfigDescription)null);
decimalSeparator = ((BaseUnityPlugin)this).Config.Bind<DecimalSeparator>("Display", "DecimalSeparator", DecimalSeparator.Period, "Changes how numbers are displayed across RoO.\nPeriod: 1,000.00\nComma: 1.000,00");
showModifiedIndicator = ((BaseUnityPlugin)this).Config.Bind<bool>("Display", "Show modified indicator", true, "Show a colored marker on the left of mod options that have been modified");
nonDefaultModifiedColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Display", "Modified color (non-default)", new Color(0.47843137f, 0.6901961f, 1f), "Color of the modified indicator when a mod option has a value different from its default");
hasChangedModifiedColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Display", "Modified color (revertable)", new Color(1f, 46f / 51f, 0.28627452f), "Color of the modified indicator when a mod option has changed but is still able to be reverted");
ModSettingsManager.Init();
ModSettingsManager.SetModIcon(Prefabs.animatedIcon);
ModSettingsManager.AddOption(new ChoiceOption((ConfigEntryBase)(object)decimalSeparator));
ModSettingsManager.AddOption(new CheckBoxOption(showModifiedIndicator));
ColorOptionConfig config = new ColorOptionConfig
{
checkIfDisabled = DisabledModifiedIndicator
};
ModSettingsManager.AddOption(new ColorOption(nonDefaultModifiedColor, config));
ModSettingsManager.AddOption(new ColorOption(hasChangedModifiedColor, config));
}
private bool DisabledModifiedIndicator()
{
return !showModifiedIndicator.Value;
}
}
internal static class SettingsModifier
{
public static void Init()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: 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_001c: Unknown result type (might be due to invalid IL or missing references)
GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/SettingsPanelTitle.prefab").WaitForCompletion();
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/SettingsPanel.prefab").WaitForCompletion();
if ((Object)(object)obj == (Object)null || (Object)(object)val == (Object)null)
{
throw new Exception("Couldn't initialize Risk Of Options! Continue at your own risk!");
}
obj.AddComponent<ModOptionPanelController>();
val.AddComponent<ModOptionPanelController>();
LanguageApi.Add("RISK_OF_OPTIONS_MOD_OPTIONS_HEADER_BUTTON_TEXT", "MOD OPTIONS");
RuntimePrefabManager.Register<ModOptionsPanelPrefab>();
RuntimePrefabManager.Register<CheckBoxPrefab>();
RuntimePrefabManager.Register<SliderPrefab>();
RuntimePrefabManager.Register<StepSliderPrefab>();
RuntimePrefabManager.Register<IntSliderPrefab>();
RuntimePrefabManager.Register<FloatFieldPrefab>();
RuntimePrefabManager.Register<IntFieldPrefab>();
RuntimePrefabManager.Register<KeyBindPrefab>();
RuntimePrefabManager.Register<InputFieldPrefab>();
RuntimePrefabManager.Register<ChoicePrefab>();
RuntimePrefabManager.Register<GenericButtonPrefab>();
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "com.rune580.riskofoptions";
public const string PLUGIN_NAME = "RiskOfOptions";
public const string PLUGIN_VERSION = "2.8.5";
}
}
namespace RiskOfOptions.Utils
{
public class ColorPickerUtil : MonoBehaviour
{
[Serializable]
public class ColorChangedEvent : UnityEvent<Color>
{
}
public RooColorHue hueController;
public RooColorPicker colorPicker;
public RgbaSliderController rgbaSliders;
public Image preview;
public TMP_InputField hexField;
public string hexFormatString = "{0:X6}";
private Action<Color> _onColorSelected;
private float _hue;
private float _saturation;
private float _value;
private int _hexValue;
private Color _color = Color.white;
public void Awake()
{
((UnityEvent<float>)hueController.onHueChanged).AddListener((UnityAction<float>)UpdateHue);
((UnityEvent<float, float>)colorPicker.onValueChanged).AddListener((UnityAction<float, float>)UpdateSatAndVal);
((UnityEvent<string>)(object)hexField.onSubmit).AddListener((UnityAction<string>)HexFieldSubmit);
((UnityEvent<string>)(object)hexField.onEndEdit).AddListener((UnityAction<string>)HexFieldSubmit);
((UnityEvent<Color>)rgbaSliders.onColorChanged).AddListener((UnityAction<Color>)SetColor);
}
public void SetColor(Color newColor)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
_color = newColor;
float value = default(float);
Color.RGBToHSV(_color, ref value, ref _saturation, ref _value);
_hue = value.Remap(0f, 1f, 0f, 6.28f);
_hexValue = _color.ToRGBHex();
UpdateControls();
UpdateHandles();
}
private void UpdateHue(float hue)
{
_hue = hue;
colorPicker.SetHue(_hue);
UpdateColorFromHSV();
}
private void UpdateSatAndVal(float saturation, float value)
{
_saturation = saturation;
_value = value;
UpdateColorFromHSV();
}
private void HexFieldSubmit(string text)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
if (int.TryParse(text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var result))
{
_hexValue = result;
}
SetColor(_color.FromRGBHex(_hexValue));
}
private void UpdateColorFromHSV()
{
//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_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
Color color = ColorExtensions.ColorFromHSV(_hue, _saturation, _value);
color.a = _color.a;
_color = color;
_hexValue = _color.ToRGBHex();
rgbaSliders.inPicker = true;
UpdateControls();
rgbaSliders.inPicker = false;
}
private void UpdateHandles()
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
hueController.SetHue(_hue);
colorPicker.SetHue(_hue);
if (_color != Color.black)
{
colorPicker.SetValues(_saturation, _value);
}
}
private void UpdateControls()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
((Graphic)preview).color = _color;
hexField.text = string.Format(CultureInfo.InvariantCulture, hexFormatString, _hexValue);
rgbaSliders.SetSliders(_color);
}
public void Accept()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
_onColorSelected(_color);
Close();
}
public void Close()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
RoR2Application.unscaledTimeTimers.CreateTimer(0.1f, (Action)delegate
{
DestroyPicker(((Component)this).gameObject);
});
}
private static void DestroyPicker(GameObject gameObject)
{
Object.DestroyImmediate((Object)(object)gameObject);
}
public static void OpenColorPicker(Action<Color> onColorSelected, Color currentColor)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
ColorPickerUtil component = Object.Instantiate<GameObject>(Prefabs.colorPickerOverlay).GetComponent<ColorPickerUtil>();
component._onColorSelected = onColorSelected;
component.SetColor(currentColor);
}
}
public class KeyBindUtil : MonoBehaviour
{
private MPEventSystem _mpEventSystem;
private SimpleDialogBox _dialogBox;
private Action<KeyboardShortcut> _onBind;
private float _timeoutTimer;
private string _keyBindName;
private bool _finished;
private readonly List<KeyCode> _heldKeys = new List<KeyCode>();
private readonly List<KeyCode> _keySequence = new List<KeyCode>();
public void StartListening()
{
if (ModSettingsManager.disablePause || _finished)
{
Object.DestroyImmediate((Object)(object)((Component)this).gameObject);
return;
}
ModSettingsManager.disablePause = true;
_dialogBox = SimpleDialogBox.Create(_mpEventSystem);
LanguageApi.AddDelegate(LanguageTokens.OptionRebindDialogDescription, ControlRebindingHook);
}
public void StopListening()
{
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
_finished = true;
if (Object.op_Implicit((Object)(object)_dialogBox) && Object.op_Implicit((Object)(object)_dialogBox.rootObject))
{
Object.DestroyImmediate((Object)(object)_dialogBox.rootObject);
_dialogBox = null;
}
LanguageApi.RemoveDelegate(LanguageTokens.OptionRebindDialogDescription);
RoR2Application.unscaledTimeTimers.CreateTimer(0.3f, (Action)Finish);
Object.Destroy((Object)(object)((Component)this).gameObject, 0.5f);
}
private void Update()
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
if (!_finished)
{
_timeoutTimer -= Time.unscaledDeltaTime;
ExtraKeyDown();
ExtraKeyUp();
if (_timeoutTimer < 0f || !Object.op_Implicit((Object)(object)_dialogBox))
{
StopListening();
return;
}
_dialogBox.headerToken = new TokenParamsPair
{
token = LanguageTokens.OptionRebindDialogTitle,
formatParams = Array.Empty<object>()
};
_dialogBox.descriptionToken = new TokenParamsPair
{
token = LanguageTokens.OptionRebindDialogDescription,
formatParams = new object[2]
{
LanguageTokens.OptionRebindDialogDescription,
_timeoutTimer
}
};
}
}
public void OnGUI()
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Invalid comparison between Unknown and I4
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Invalid comparison between Unknown and I4
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Invalid comparison between Unknown and I4
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Invalid comparison between Unknown and I4
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
if (_finished)
{
return;
}
bool flag = !Event.current.isKey;
EventType type;
if (!flag)
{
type = Event.current.type;
bool flag2 = type - 4 <= 1;
flag = !flag2;
}
if (flag || (int)Event.current.keyCode == 0)
{
return;
}
if ((int)Event.current.keyCode == 27)
{
SetKeyBind((KeyCode)0);
return;
}
type = Event.current.type;
if ((int)type != 4)
{
if ((int)type != 5)
{
throw new ArgumentOutOfRangeException();
}
KeyUp(Event.current.keyCode);
}
else
{
KeyDown(Event.current.keyCode);
}
}
private void ExtraKeyDown()
{
if (Input.GetKeyDown((KeyCode)304))
{
KeyDown((KeyCode)304);
}
else if (Input.GetKeyDown((KeyCode)303))
{
KeyDown((KeyCode)303);
}
else if (Input.GetKeyDown((KeyCode)323))
{
KeyDown((KeyCode)323);
}
else if (Input.GetKeyDown((KeyCode)324))
{
KeyDown((KeyCode)324);
}
else if (Input.GetKeyDown((KeyCode)325))
{
KeyDown((KeyCode)325);
}
else if (Input.GetKeyDown((KeyCode)326))
{
KeyDown((KeyCode)326);
}
else if (Input.GetKeyDown((KeyCode)327))
{
KeyDown((KeyCode)327);
}
}
private void ExtraKeyUp()
{
if (Input.GetKeyUp((KeyCode)304))
{
KeyUp((KeyCode)304);
}
else if (Input.GetKeyUp((KeyCode)303))
{
KeyUp((KeyCode)303);
}
else if (Input.GetKeyUp((KeyCode)323))
{
KeyUp((KeyCode)323);
}
else if (Input.GetKeyUp((KeyCode)324))
{
KeyUp((KeyCode)324);
}
else if (Input.GetKeyUp((KeyCode)325))
{
KeyUp((KeyCode)325);
}
else if (Input.GetKeyUp((KeyCode)326))
{
KeyUp((KeyCode)326);
}
else if (Input.GetKeyUp((KeyCode)327))
{
KeyUp((KeyCode)327);
}
}
private void KeyDown(KeyCode keyCode)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
if (!_heldKeys.Contains(keyCode))
{
_heldKeys.Add(keyCode);
}
}
private void KeyUp(KeyCode keyCode)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: 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)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Expected I4, but got Unknown
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
if (!_heldKeys.Contains(keyCode))
{
return;
}
_heldKeys.Remove(keyCode);
if (_keySequence.Contains(keyCode))
{
return;
}
_keySequence.Add(keyCode);
if (_heldKeys.Count != 0)
{
return;
}
KeyboardShortcut keyBind = default(KeyboardShortcut);
if (_keySequence.Count > 1)
{
KeyCode[] array = (KeyCode[])(object)new KeyCode[_keySequence.Count - 1];
for (int i = 0; i < array.Length; i++)
{
array[i] = (KeyCode)(int)_keySequence[i + 1];
}
((KeyboardShortcut)(ref keyBind))..ctor(_keySequence[0], array);
}
else
{
((KeyboardShortcut)(ref keyBind))..ctor(_keySequence[0], Array.Empty<KeyCode>());
}
SetKeyBind(keyBind);
}
private void SetKeyBind(KeyCode keyCode)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
SetKeyBind(new KeyboardShortcut(keyCode, Array.Empty<KeyCode>()));
}
private void SetKeyBind(KeyboardShortcut keyBind)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
_onBind(keyBind);
StopListening();
}
private string ControlRebindingHook()
{
int num = Mathf.RoundToInt(_timeoutTimer);
return $"Press the button(s) you wish to assign for {_keyBindName}.\n{num} second(s) remaining.";
}
private void Finish()
{
ModSettingsManager.disablePause = false;
}
public static void StartBinding(Action<KeyboardShortcut> onBind, string keyBindName, float timeoutTimer = 5f, MPEventSystem mpEventSystem = null)
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
KeyBindUtil component = new GameObject("KeyBindUtil instance", new Type[1] { typeof(KeyBindUtil) }).GetComponent<KeyBindUtil>();
component._onBind = onBind;
component._timeoutTimer = timeoutTimer;
component._mpEventSystem = mpEventSystem;
component._keyBindName = keyBindName;
component.StartListening();
}
}
}
namespace RiskOfOptions.Resources
{
internal static class Assets
{
private static AssetBundle _mainAssetBundle;
internal static T Load<T>(string asset) where T : Object
{
return _mainAssetBundle.LoadAsset<T>(asset);
}
internal static void LoadAssets()
{
using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("RiskOfOptions.Resources.AssetBundles.riskofoptions");
_mainAssetBundle = AssetBundle.LoadFromStream(stream);
}
}
public static class Prefabs
{
private static AssetBundle _uiBundle;
public static GameObject animatedIcon;
public static GameObject modOptionsPanel;
public static GameObject modListPanel;
public static GameObject modListButton;
public static GameObject modDescriptionPanel;
public static GameObject modOptionDescriptionPanel;
public static GameObject modOptionCategories;
public static GameObject boolButton;
public static GameObject sliderButton;
public static GameObject stepSliderButton;
public static GameObject intSliderButton;
public static GameObject floatFieldButton;
public static GameObject intFieldButton;
public static GameObject inputFieldButton;
public static GameObject colorPickerButton;
public static GameObject colorPickerOverlay;
internal static void Init()
{
_uiBundle = LoadBundle("uielements");
animatedIcon = LoadPrefab("RoO-Icon.prefab");
modOptionsPanel = LoadPrefab("Options Panel.prefab");
modListPanel = LoadPrefab("Mod List Panel.prefab");
modListButton = LoadPrefab("Mod List Button.prefab");
modDescriptionPanel = LoadPrefab("Mod Description Panel.prefab");
modOptionDescriptionPanel = LoadPrefab("Option Description Panel.prefab");
modOptionCategories = LoadPrefab("Category Headers.prefab");
boolButton = LoadPrefab("ModSettingsButton, Bool.prefab");
sliderButton = LoadPrefab("ModSettingsButton, Slider.prefab");
stepSliderButton = LoadPrefab("ModSettingsButton, Step Slider.prefab");
intSliderButton = LoadPrefab("ModSettingsButton, Int Slider.prefab");
floatFieldButton = LoadPrefab("ModSettingsButton, Float Field.prefab");
intFieldButton = LoadPrefab("ModSettingsButton, Int Field.prefab");
inputFieldButton = LoadPrefab("ModSettingsButton, InputField.prefab");
colorPickerButton = LoadPrefab("ModSettingsButton, ColorPicker.prefab");
colorPickerOverlay = LoadPrefab("Color Picker Overlay.prefab");
}
private static GameObject LoadPrefab(string path)
{
GameObject val = _uiBundle.LoadAsset<GameObject>("assets/roo/prefabs/" + path);
AssetResolver[] componentsInChildren = val.GetComponentsInChildren<AssetResolver>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
componentsInChildren[i].AttemptResolve();
}
return val;
}
private static AssetBundle LoadBundle(string name)
{
using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("RiskOfOptions.Resources.AssetBundles." + name);
return AssetBundle.LoadFromStream(stream);
}
}
}
namespace RiskOfOptions.Options
{
public abstract class BaseOption
{
public abstract string OptionTypeName { get; protected set; }
public string Identifier { get; internal set; }
public string ModGuid { get; internal set; }
public string ModName { get; internal set; }
public string Category { get; internal set; }
public string Name { get; internal set; }
public string Description { get; internal set; }
public string DescriptionToken { get; internal set; }
public string NameToken { get; internal set; }
internal abstract ConfigEntryBase ConfigEntry { get; }
public virtual void SetCategoryName(string fallback, BaseOptionConfig config)
{
if (!string.IsNullOrEmpty(config.category))
{
Category = config.category;
}
else
{
Category = fallback;
}
}
public virtual void SetName(string fallback, BaseOptionConfig config)
{
if (!string.IsNullOrEmpty(config.name))
{
Name = config.name;
}
else
{
Name = fallback;
}
}
public virtual void SetDescription(string fallback, BaseOptionConfig config)
{
if (!string.IsNullOrEmpty(config.description))
{
Description = config.description;
}
else
{
Description = fallback;
}
}
internal virtual void RegisterTokens()
{
LanguageApi.Add(GetNameToken(), Name);
LanguageApi.Add(GetDescriptionToken(), Description);
}
public string GetNameToken()
{
if (!string.IsNullOrEmpty(NameToken))
{
return NameToken;
}
return ("RISK_OF_OPTIONS." + ModGuid + "." + Category + "." + Name + "." + OptionTypeName + ".name").Replace(" ", "_").ToUpper();
}
public string GetDescriptionToken()
{
if (!string.IsNullOrEmpty(DescriptionToken))
{
return DescriptionToken;
}
return ("RISK_OF_OPTIONS." + ModGuid + "." + Category + "." + Name + "." + OptionTypeName + ".description").Replace(" ", "_").ToUpper();
}
public abstract GameObject CreateOptionGameObject(GameObject prefab, Transform parent);
public abstract BaseOptionConfig GetConfig();
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if (obj is BaseOption other)
{
return Equals(other);
}
return false;
}
private bool Equals(BaseOption other)
{
return string.Equals(Identifier, other.Identifier, StringComparison.InvariantCulture);
}
public override int GetHashCode()
{
if (Identifier == null)
{
return 0;
}
return StringComparer.InvariantCulture.GetHashCode(Identifier);
}
protected internal virtual void SetProperties()
{
if (ConfigEntry != null)
{
BaseOptionConfig config = GetConfig();
SetCategoryName(ConfigEntry.Definition.Section, config);
SetName(ConfigEntry.Definition.Key, config);
SetDescription(ConfigEntry.Description.Description, config);
}
}
public string GetLocalizedName()
{
return Language.GetString(GetNameToken());
}
public string GetLocalizedDescription()
{
return Language.GetString(GetDescriptionToken());
}
}
public class CheckBoxOption : BaseOption, ITypedValueHolder<bool>
{
protected readonly bool originalValue;
private readonly ConfigEntry<bool> _configEntry;
protected readonly CheckBoxConfig config;
public override string OptionTypeName { get; protected set; } = "checkbox";
internal override ConfigEntryBase ConfigEntry => (ConfigEntryBase)(object)_configEntry;
public virtual bool Value
{
get
{
return _configEntry.Value;
}
set
{
_configEntry.Value = value;
}
}
public CheckBoxOption(ConfigEntry<bool> configEntry)
: this(configEntry, new CheckBoxConfig())
{
}
public CheckBoxOption(ConfigEntry<bool> configEntry, bool restartRequired)
: this(configEntry, new CheckBoxConfig
{
restartRequired = restartRequired
})
{
}
public CheckBoxOption(ConfigEntry<bool> configEntry, CheckBoxConfig config)
: this(config, configEntry.Value)
{
_configEntry = configEntry;
}
protected CheckBoxOption(CheckBoxConfig config, bool originalValue)
{
this.originalValue = originalValue;
this.config = config;
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
ModSettingsBool componentInChildren = obj.GetComponentInChildren<ModSettingsBool>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
((Object)obj).name = "Mod Option CheckBox, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public bool ValueChanged()
{
return Value != GetOriginalValue();
}
public bool GetOriginalValue()
{
return originalValue;
}
}
public class ChoiceOption : BaseOption, ITypedValueHolder<object>
{
protected readonly object originalValue;
private readonly ConfigEntryBase _configEntry;
protected readonly ChoiceConfig config;
private string[] _nameTokens;
public override string OptionTypeName { get; protected set; } = "choice";
internal override ConfigEntryBase ConfigEntry => _configEntry;
public virtual object Value
{
get
{
return _configEntry.BoxedValue;
}
set
{
_configEntry.BoxedValue = Enum.Parse(_configEntry.SettingType, value.ToString());
}
}
public ChoiceOption(ConfigEntryBase configEntry)
: this(configEntry, new ChoiceConfig())
{
}
public ChoiceOption(ConfigEntryBase configEntry, bool restartRequired)
: this(configEntry, new ChoiceConfig
{
restartRequired = restartRequired
})
{
}
public ChoiceOption(ConfigEntryBase configEntry, ChoiceConfig config)
: this(config, configEntry.BoxedValue)
{
if (!configEntry.SettingType.IsEnum)
{
throw new InvalidCastException("T in configEntry<T> must be of type Enum, Type found: " + configEntry.SettingType.Name);
}
_configEntry = configEntry;
}
protected ChoiceOption(ChoiceConfig config, object originalValue)
{
this.originalValue = originalValue;
this.config = config;
}
internal override void RegisterTokens()
{
base.RegisterTokens();
RegisterChoiceTokens();
}
internal void RegisterChoiceTokens()
{
string[] names = Enum.GetNames(Value.GetType());
_nameTokens = new string[names.Length];
for (int i = 0; i < names.Length; i++)
{
string text = ("RISK_OF_OPTIONS." + base.ModGuid + "." + base.Category + "." + base.Name + "." + OptionTypeName + ".item." + names[i]).Replace(" ", "_").ToUpper();
_nameTokens[i] = text;
LanguageApi.Add(text, names[i]);
}
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
DropDownController componentInChildren = obj.GetComponentInChildren<DropDownController>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
((Object)obj).name = "Mod Option Choice, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public bool ValueChanged()
{
return !Value.Equals(originalValue);
}
public object GetOriginalValue()
{
return originalValue;
}
internal string[] GetNameTokens()
{
return _nameTokens;
}
}
public class ColorOption : BaseOption, ITypedValueHolder<Color>
{
protected readonly Color originalValue;
private readonly ConfigEntry<Color> _configEntry;
protected readonly ColorOptionConfig config;
public override string OptionTypeName { get; protected set; } = "color";
internal override ConfigEntryBase ConfigEntry => (ConfigEntryBase)(object)_configEntry;
public virtual Color Value
{
get
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return _configEntry.Value;
}
set
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
_configEntry.Value = value;
}
}
public ColorOption(ConfigEntry<Color> configEntry)
: this(configEntry, new ColorOptionConfig())
{
}
public ColorOption(ConfigEntry<Color> configEntry, bool restartRequired)
: this(configEntry, new ColorOptionConfig
{
restartRequired = true
})
{
}
public ColorOption(ConfigEntry<Color> configEntry, ColorOptionConfig config)
: this(config, configEntry.Value)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
_configEntry = configEntry;
}
protected ColorOption(ColorOptionConfig config, Color originalValue)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
this.originalValue = originalValue;
this.config = config;
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
ModSettingsColor componentInChildren = obj.GetComponentInChildren<ModSettingsColor>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
((Object)obj).name = "Mod Option Color, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public bool ValueChanged()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
return Value != GetOriginalValue();
}
public Color GetOriginalValue()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
return originalValue;
}
}
public enum DecimalSeparator
{
Period,
Comma
}
public static class DecimalSeparatorExtensions
{
private static CultureInfo? _commaCultureInstance;
private static CultureInfo CommaCulture
{
get
{
if (_commaCultureInstance == null)
{
_commaCultureInstance = (CultureInfo)CultureInfo.InvariantCulture.Clone();
_commaCultureInstance.NumberFormat.NumberDecimalSeparator = ",";
_commaCultureInstance.NumberFormat.NumberGroupSeparator = ".";
}
return _commaCultureInstance;
}
}
public static char Char(this DecimalSeparator separator)
{
return separator switch
{
DecimalSeparator.Period => '.',
DecimalSeparator.Comma => ',',
_ => throw new ArgumentOutOfRangeException("separator", separator, null),
};
}
public static CultureInfo GetCultureInfo(this DecimalSeparator separator)
{
return separator switch
{
DecimalSeparator.Period => CultureInfo.InvariantCulture,
DecimalSeparator.Comma => CommaCulture,
_ => throw new ArgumentOutOfRangeException("separator", separator, null),
};
}
}
public class FloatFieldOption : BaseOption, ITypedValueHolder<float>
{
protected readonly float originalValue;
private readonly ConfigEntry<float> _configEntry;
protected readonly FloatFieldConfig config;
public override string OptionTypeName { get; protected set; } = "float_field";
internal override ConfigEntryBase ConfigEntry => (ConfigEntryBase)(object)_configEntry;
public virtual float Value
{
get
{
return _configEntry.Value;
}
set
{
_configEntry.Value = value;
}
}
public FloatFieldOption(ConfigEntry<float> configEntry)
: this(configEntry, new FloatFieldConfig())
{
}
public FloatFieldOption(ConfigEntry<float> configEntry, bool restartRequired)
: this(configEntry, new FloatFieldConfig
{
restartRequired = restartRequired
})
{
}
public FloatFieldOption(ConfigEntry<float> configEntry, FloatFieldConfig config)
: this(config, configEntry.Value)
{
_configEntry = configEntry;
}
protected FloatFieldOption(FloatFieldConfig config, float originalValue)
{
this.originalValue = originalValue;
this.config = config;
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
ModSettingsFloatField componentInChildren = obj.GetComponentInChildren<ModSettingsFloatField>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
componentInChildren.min = config.Min;
componentInChildren.max = config.Max;
componentInChildren.formatString = config.FormatString;
((Object)componentInChildren).name = "Mod Options Float Field, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public float GetOriginalValue()
{
return originalValue;
}
public bool ValueChanged()
{
return Value != GetOriginalValue();
}
}
public class GenericButtonOption : BaseOption
{
internal readonly GenericButtonConfig config;
internal override ConfigEntryBase ConfigEntry => null;
public override string OptionTypeName { get; protected set; } = "generic_button";
public GenericButtonOption(string name, string category, UnityAction onButtonPressed)
: this(name, category, "", "Open", onButtonPressed)
{
}
public GenericButtonOption(string name, string category, string description, string buttonText, UnityAction onButtonPressed)
{
config = new GenericButtonConfig(name, category, description, buttonText, onButtonPressed);
base.Category = category;
base.Name = name;
base.Description = description;
}
internal override void RegisterTokens()
{
base.RegisterTokens();
LanguageApi.Add(GetButtonLabelToken(), config.ButtonText);
}
public string GetButtonLabelToken()
{
return ("RISK_OF_OPTIONS." + base.ModGuid + "." + base.Category + "." + base.Name + "." + OptionTypeName + ".sub_button.name").Replace(" ", "_").ToUpper();
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
GenericButtonController componentInChildren = obj.GetComponentInChildren<GenericButtonController>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
componentInChildren.buttonToken = GetButtonLabelToken();
componentInChildren.OnButtonPressed = config.OnButtonPressed;
((Object)obj).name = "Mod Option GenericButton, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
}
public class IntFieldOption : BaseOption, ITypedValueHolder<int>
{
protected readonly int originalValue;
private readonly ConfigEntry<int> _configEntry;
protected readonly IntFieldConfig config;
public override string OptionTypeName { get; protected set; } = "int_field";
internal override ConfigEntryBase ConfigEntry => (ConfigEntryBase)(object)_configEntry;
public virtual int Value
{
get
{
return _configEntry.Value;
}
set
{
_configEntry.Value = value;
}
}
public IntFieldOption(ConfigEntry<int> configEntry)
: this(configEntry, new IntFieldConfig())
{
}
public IntFieldOption(ConfigEntry<int> configEntry, bool restartRequired)
: this(configEntry, new IntFieldConfig
{
restartRequired = restartRequired
})
{
}
public IntFieldOption(ConfigEntry<int> configEntry, IntFieldConfig config)
: this(config, configEntry.Value)
{
_configEntry = configEntry;
}
protected IntFieldOption(IntFieldConfig config, int originalValue)
{
this.originalValue = originalValue;
this.config = config;
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
ModSettingsIntField componentInChildren = obj.GetComponentInChildren<ModSettingsIntField>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
componentInChildren.min = config.Min;
componentInChildren.max = config.Max;
componentInChildren.formatString = config.FormatString;
((Object)componentInChildren).name = "Mod Options Int Field, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public int GetOriginalValue()
{
return originalValue;
}
public bool ValueChanged()
{
return Value != GetOriginalValue();
}
}
public class IntSliderOption : BaseOption, ITypedValueHolder<int>
{
protected readonly int originalValue;
private readonly ConfigEntry<int> _configEntry;
protected readonly IntSliderConfig config;
public override string OptionTypeName { get; protected set; } = "int_slider";
internal override ConfigEntryBase ConfigEntry => (ConfigEntryBase)(object)_configEntry;
public virtual int Value
{
get
{
return _configEntry.Value;
}
set
{
_configEntry.Value = value;
}
}
public IntSliderOption(ConfigEntry<int> configEntry)
: this(configEntry, new IntSliderConfig())
{
}
public IntSliderOption(ConfigEntry<int> configEntry, bool restartRequired)
: this(configEntry, new IntSliderConfig
{
restartRequired = restartRequired
})
{
}
public IntSliderOption(ConfigEntry<int> configEntry, IntSliderConfig config)
: this(config, configEntry.Value)
{
_configEntry = configEntry;
}
protected IntSliderOption(IntSliderConfig config, int originalValue)
{
this.originalValue = originalValue;
this.config = config;
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
ModSettingsIntSlider componentInChildren = obj.GetComponentInChildren<ModSettingsIntSlider>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
componentInChildren.minValue = config.min;
componentInChildren.maxValue = config.max;
componentInChildren.formatString = config.formatString;
((Object)obj).name = "Mod Options Int Slider, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public bool ValueChanged()
{
return Value != GetOriginalValue();
}
public int GetOriginalValue()
{
return originalValue;
}
}
public interface ITypedValueHolder<T>
{
T Value { get; set; }
T GetOriginalValue();
bool ValueChanged();
}
public class KeyBindOption : BaseOption, ITypedValueHolder<KeyboardShortcut>
{
protected readonly KeyboardShortcut originalValue;
private readonly ConfigEntry<KeyboardShortcut> _configEntry;
protected readonly KeyBindConfig config;
public override string OptionTypeName { get; protected set; } = "key_bind";
internal override ConfigEntryBase ConfigEntry => (ConfigEntryBase)(object)_configEntry;
public virtual KeyboardShortcut Value
{
get
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return _configEntry.Value;
}
set
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
_configEntry.Value = value;
}
}
public KeyBindOption(ConfigEntry<KeyboardShortcut> configEntry)
: this(configEntry, new KeyBindConfig())
{
}
public KeyBindOption(ConfigEntry<KeyboardShortcut> configEntry, bool restartRequired)
: this(configEntry, new KeyBindConfig
{
restartRequired = restartRequired
})
{
}
public KeyBindOption(ConfigEntry<KeyboardShortcut> configEntry, KeyBindConfig config)
: this(config, configEntry.Value)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
_configEntry = configEntry;
}
protected KeyBindOption(KeyBindConfig config, KeyboardShortcut originalValue)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
this.originalValue = originalValue;
this.config = config;
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Expected O, but got Unknown
//IL_00a5: Expected O, but got Unknown
GameObject val = Object.Instantiate<GameObject>(prefab, parent);
KeyBindController controller = val.GetComponentInChildren<KeyBindController>();
controller.nameToken = GetNameToken();
controller.settingToken = base.Identifier;
((TMP_Text)((Component)val.transform.Find("ButtonText")).GetComponent<HGTextMeshProUGUI>()).SetText(GetLocalizedName(), true);
((Object)val).name = "Mod Option KeyBind, " + base.Name;
HGButton[] componentsInChildren = val.GetComponentsInChildren<HGButton>();
UnityAction val2 = default(UnityAction);
for (int i = 0; i < componentsInChildren.Length; i++)
{
ButtonClickedEvent onClick = ((Button)componentsInChildren[i]).onClick;
UnityAction obj = val2;
if (obj == null)
{
UnityAction val3 = delegate
{
controller.StartListening();
};
UnityAction val4 = val3;
val2 = val3;
obj = val4;
}
((UnityEvent)onClick).AddListener(obj);
}
return val;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public bool ValueChanged()
{
//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_000a: Unknown result type (might be due to invalid IL or missing references)
KeyboardShortcut value = Value;
return !((object)(KeyboardShortcut)(ref value)).Equals((object?)GetOriginalValue());
}
public KeyboardShortcut GetOriginalValue()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
return originalValue;
}
}
public class SliderOption : BaseOption, ITypedValueHolder<float>
{
protected readonly float originalValue;
private readonly ConfigEntry<float> _configEntry;
protected readonly SliderConfig config;
public override string OptionTypeName { get; protected set; } = "slider";
internal override ConfigEntryBase ConfigEntry => (ConfigEntryBase)(object)_configEntry;
public virtual float Value
{
get
{
return _configEntry.Value;
}
set
{
_configEntry.Value = value;
}
}
public SliderOption(ConfigEntry<float> configEntry)
: this(configEntry, new SliderConfig())
{
}
public SliderOption(ConfigEntry<float> configEntry, bool restartRequired)
: this(configEntry, new SliderConfig
{
restartRequired = restartRequired
})
{
}
public SliderOption(ConfigEntry<float> configEntry, SliderConfig config)
: this(config, configEntry.Value)
{
_configEntry = configEntry;
}
protected SliderOption(SliderConfig config, float originalValue)
{
this.originalValue = originalValue;
this.config = config;
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
ModSettingsSlider componentInChildren = obj.GetComponentInChildren<ModSettingsSlider>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
componentInChildren.minValue = config.min;
componentInChildren.maxValue = config.max;
componentInChildren.formatString = config.FormatString;
((Object)obj).name = "Mod Option Slider, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public bool ValueChanged()
{
return Value != GetOriginalValue();
}
public float GetOriginalValue()
{
return originalValue;
}
}
public class StepSliderOption : BaseOption, ITypedValueHolder<float>
{
protected readonly float originalValue;
private readonly ConfigEntry<float> _configEntry;
protected readonly StepSliderConfig config;
public override string OptionTypeName { get; protected set; } = "step_slider";
internal override ConfigEntryBase ConfigEntry => (ConfigEntryBase)(object)_configEntry;
public virtual float Value
{
get
{
return _configEntry.Value;
}
set
{
_configEntry.Value = value;
}
}
public StepSliderOption(ConfigEntry<float> configEntry)
: this(configEntry, new StepSliderConfig())
{
}
public StepSliderOption(ConfigEntry<float> configEntry, bool restartRequired)
: this(configEntry, new StepSliderConfig
{
restartRequired = restartRequired
})
{
}
public StepSliderOption(ConfigEntry<float> configEntry, StepSliderConfig config)
: this(config, configEntry.Value)
{
_configEntry = configEntry;
}
protected StepSliderOption(StepSliderConfig config, float originalValue)
{
this.originalValue = originalValue;
this.config = config;
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
ModSettingsStepSlider componentInChildren = obj.GetComponentInChildren<ModSettingsStepSlider>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
componentInChildren.increment = config.increment;
componentInChildren.minValue = config.min;
componentInChildren.maxValue = config.max;
componentInChildren.remapManualInputToStep = config.remapManualInputToStep;
componentInChildren.formatString = config.FormatString;
int num = (int)Math.Round(Math.Abs(config.min - config.max) / config.increment);
componentInChildren.slider.minValue = 0f;
componentInChildren.slider.maxValue = num;
componentInChildren.slider.wholeNumbers = true;
((Object)obj).name = "Mod Option Step Slider, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public bool ValueChanged()
{
return Value != GetOriginalValue();
}
public float GetOriginalValue()
{
return originalValue;
}
}
public class StringInputFieldOption : BaseOption, ITypedValueHolder<string>
{
protected readonly string originalValue;
private readonly ConfigEntry<string> _configEntry;
protected readonly InputFieldConfig config;
public override string OptionTypeName { get; protected set; } = "string_input_field";
internal override ConfigEntryBase ConfigEntry => (ConfigEntryBase)(object)_configEntry;
public virtual string Value
{
get
{
return _configEntry.Value;
}
set
{
_configEntry.Value = value;
}
}
public StringInputFieldOption(ConfigEntry<string> configEntry)
: this(configEntry, new InputFieldConfig())
{
}
public StringInputFieldOption(ConfigEntry<string> configEntry, bool restartRequired)
: this(configEntry, new InputFieldConfig
{
restartRequired = restartRequired
})
{
}
public StringInputFieldOption(ConfigEntry<string> configEntry, InputFieldConfig config)
: this(config, configEntry.Value)
{
_configEntry = configEntry;
}
protected StringInputFieldOption(InputFieldConfig config, string originalValue)
{
this.originalValue = originalValue;
this.config = config;
}
public override GameObject CreateOptionGameObject(GameObject prefab, Transform parent)
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
GameObject obj = Object.Instantiate<GameObject>(prefab, parent);
InputFieldController componentInChildren = obj.GetComponentInChildren<InputFieldController>();
componentInChildren.nameToken = GetNameToken();
componentInChildren.settingToken = base.Identifier;
componentInChildren.submitOn = config.submitOn;
componentInChildren.lineType = config.lineType;
componentInChildren.richText = config.richText;
componentInChildren.characterValidation = (CharacterValidation)0;
((Object)obj).name = "Mod Option Input Field, " + base.Name;
return obj;
}
public override BaseOptionConfig GetConfig()
{
return config;
}
public bool ValueChanged()
{
return !string.Equals(_configEntry.Value, originalValue, StringComparison.InvariantCulture);
}
public string GetOriginalValue()
{
return originalValue;
}
}
}
namespace RiskOfOptions.OptionConfigs
{
public class BaseOptionConfig
{
public delegate bool IsDisabledDelegate();
public string name = "";
public string description = "";
public string category = "";
public bool restartRequired;
[Obsolete("Not yet implemented")]
public bool hidden;
public IsDisabledDelegate checkIfDisabled;
}
public class CheckBoxConfig : BaseOptionConfig
{
}
public class ChoiceConfig : BaseOptionConfig
{
}
public class ColorOptionConfig : BaseOptionConfig
{
}
public class FloatFieldConfig : NumericFieldConfig<float>
{
public override float Min { get; set; } = float.MinValue;
public override float Max { get; set; } = float.MaxValue;
}
public class GenericButtonConfig : BaseOptionConfig
{
public readonly UnityAction OnButtonPressed;
public readonly string ButtonText;
public GenericButtonConfig(string name, string category, string description, string buttonText, UnityAction onButtonPressed)
{
base.name = name;
base.category = category;
base.description = description;
ButtonText = buttonText;
OnButtonPressed = onButtonPressed;
}
}
public class InputFieldConfig : BaseOptionConfig
{
[Flags]
public enum SubmitEnum
{
OnChar = 1,
OnSubmit = 2,
OnExit = 4,
OnExitOrSubmit = 6,
All = 7
}
public SubmitEnum submitOn = SubmitEnum.OnChar;
public LineType lineType = (LineType)1;
public bool richText = true;
}
public class IntFieldConfig : NumericFieldConfig<int>
{
public override int Min { get; set; } = int.MinValue;
public override int Max { get; set; } = int.MaxValue;
}
public class IntSliderConfig : BaseOptionConfig
{
public delegate bool IntSliderTryParse(string input, CultureInfo cultureInfo, out int value);
public int min;
public int max = 100;
public string formatString = "{0}";
public IntSliderTryParse? TryParseDelegate { get; set; }
}
public class KeyBindConfig : BaseOptionConfig
{
}
public abstract class NumericFieldConfig<TNumeric> : BaseOptionConfig
{
public delegate bool NumericFieldTryParse(string input, CultureInfo cultureInfo, out TNumeric value);
public abstract TNumeric Min { get; set; }
public abstract TNumeric Max { get; set; }
public string FormatString { get; set; } = "{0}";
public NumericFieldTryParse? TryParse { get; set; }
}
public class SliderConfig : BaseOptionConfig
{
public delegate bool SliderTryParse(string input, CultureInfo cultureInfo, out float value);
public float min;
public float max = 100f;
[Obsolete("Use FormatString Property instead")]
public string formatString = "{0:0}%";
public virtual string FormatString
{
get
{
return formatString;
}
set
{
formatString = value;
}
}
public SliderTryParse? TryParseDelegate { get; set; }
}
public class StepSliderConfig : SliderConfig
{
public float increment = 1f;
public bool remapManualInputToStep = true;
public override string FormatString { get; set; } = "{0}";
}
}
namespace RiskOfOptions.Lib
{
public static class ColorExtensions
{
private const float Scale = 255f;
public static Color FromRGBHex(this Color orig, int hex)
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
int num = (hex & 0xFF0000) >> 16;
int num2 = (hex & 0xFF00) >> 8;
int num3 = hex & 0xFF;
return new Color((float)num / 255f, (float)num2 / 255f, (float)num3 / 255f, orig.a);
}
public static int ToRGBHex(this Color orig)
{
//IL_0000: 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_0020: Unknown result type (might be due to invalid IL or missing references)
int num = (int)(orig.r * 255f) << 16;
int num2 = (int)(orig.g * 255f) << 8;
int num3 = (int)(orig.b * 255f);
return num | num2 | num3;
}
internal static Color ColorFromHSV(float hue, float sat, float val)
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
float num = val * sat;
float num2 = MathF.PI / 3f;
float num3 = num * (1f - Mathf.Abs((float)((double)(hue / num2) % 2.0 - 1.0)));
float num4 = val - num;
if (hue < 1f * num2)
{
return new Color(num4 + num, num4 + num3, num4 + 0f, 1f);
}
if (hue < 2f * num2)
{
return new Color(num4 + num3, num4 + num, num4 + 0f, 1f);
}
if (hue < 3f * num2)
{
return new Color(num4 + 0f, num4 + num, num4 + num3, 1f);
}
if (hue < 4f * num2)
{
return new Color(num4 + 0f, num4 + num3, num4 + num, 1f);
}
if (hue < 5f * num2)
{
return new Color(num4 + num3, num4 + 0f, num4 + num, 1f);
}
return new Color(num4 + num, num4 + 0f, num4 + num3, 1f);
}
internal static void ToHSV(this Color orig, float inHue, out float outHue, out float saturation, out float value)
{
//IL_0007: 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)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
outHue = 0f;
float num = Mathf.Min(orig.r, Mathf.Min(orig.g, orig.b));
float num2 = Mathf.Max(orig.r, Mathf.Max(orig.g, orig.b));
float num3 = num2 - num;
value = num2;
if (num3 == 0f)
{
saturation = 0f;
outHue = inHue.Remap(0f, 6.28f, 0f, 1f);
}
else
{
saturation = num3 / num2;
float num4 = ((num2 - orig.r) / 6f + num3 / 2f) / num3;
float num5 = ((num2 - orig.g) / 6f + num3 / 2f) / num3;
float num6 = ((num2 - orig.b) / 6f + num3 / 2f) / num3;
if (orig.r == num3)
{
outHue = num6 - num5;
}
else if (orig.g == num3)
{
outHue = 1f / 3f + num4 - num6;
}
else if (orig.b == num3)
{
outHue = 2f / 3f + num5 - num4;
}
if (outHue < 0f)
{
outHue += 1f;
}
if (outHue > 1f)
{
outHue -= 1f;
}
}
outHue = outHue.Remap(0f, 1f, 0f, 6.28f);
}
}
internal static class CursorController
{
private static Hook _controllerHook;
private static CursorSet _origMouse;
private static CursorSet _origGamepad;
private static CursorSet _cursorSet = default(CursorSet);
private static CursorIndicatorController _indicatorControllerInstance;
internal static readonly Dictionary<string, GameObject> Cursors = new Dictionary<string, GameObject>();
private static CursorIndicatorController IndicatorController
{
get
{
if (!Object.op_Implicit((Object)(object)_indicatorControllerInstance))
{
_indicatorControllerInstance = ((IEnumerable<MPEventSystem>)MPEventSystem.readOnlyInstancesList).FirstOrDefault((Func<MPEventSystem, bool>)((MPEventSystem instance) => (Object)(object)instance.cursorIndicatorController != (Object)null))?.cursorIndicatorController;
}
return _indicatorControllerInstance;
}
}
internal static void Init()
{
InitHooks();
LoadCursors();
ModifyCursorIndicatorController();
}
private static void InitHooks()
{
MethodInfo method = typeof(CursorController).GetMethod("SetCursorOverride", BindingFlags.Static | BindingFlags.NonPublic);
_controllerHook = HookHelper.NewHook<CursorIndicatorController>("SetCursor", method);
}
private static void LoadCursors()
{
}
private static void ModifyCursorIndicatorController()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: 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)
GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/CursorIndicator.prefab").WaitForCompletion();
obj.AddComponent<AddCursorsToController>();
CursorIndicatorController component = obj.GetComponent<CursorIndicatorController>();
_origMouse = component.mouseCursorSet;
_origGamepad = component.gamepadCursorSet;
}
private static void SetCursorOverride(Action<CursorIndicatorController, CursorSet, CursorImage, Color> orig, CursorIndicatorController self, CursorSet set, CursorImage image, Color color)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
orig(self, set, image, color);
}
}
internal static class HookHelper
{
private const BindingFlags TargetFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
private const BindingFlags DestFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
internal static Hook NewHook<TTarget, TDest>(string targetMethodName, string destMethodName, TDest instance)
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Expected O, but got Unknown
MethodInfo? method = typeof(TTarget).GetMethod(targetMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
MethodInfo method2 = typeof(TDest).GetMethod(destMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
return new Hook((MethodBase)method, method2, (object)instance);
}
internal static Hook NewHook<TTarget>(string targetMethodName, MethodInfo destMethod)
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
return new Hook((MethodBase)typeof(TTarget).GetMethod(targetMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), destMethod);
}
}
internal static class KeyValuePairExtensions
{
internal static void Deconstruct<TKey, TValue>(this KeyValuePair<TKey, TValue> keyValuePair, out TKey key, out TValue value)
{
key = keyValuePair.Key;
value = keyValuePair.Value;
}
}
internal static class LanguageApi
{
internal delegate string LanguageStringDelegate();
private static readonly Dictionary<string, string> LanguageEntries = new Dictionary<string, string>();
private static readonly Dictionary<string, LanguageStringDelegate> DynamicLanguageEntries = new Dictionary<string, LanguageStringDelegate>();
private static Hook _languageHook;
internal static void Init()
{
MethodInfo method = typeof(LanguageApi).GetMethod("GetLocalizedStringByToken", BindingFlags.Static | BindingFlags.NonPublic);
_languageHook = HookHelper.NewHook<Language>("GetLocalizedStringByToken", method);
}
internal static void Add(string token, string entry)
{
LanguageEntries[token] = entry;
}
internal static void AddDelegate(string token, LanguageStringDelegate stringDelegate)
{
DynamicLanguageEntries[token] = stringDelegate;
}
internal static void RemoveDelegate(string token)
{
DynamicLanguageEntries.Remove(token);
}
private static string GetLocalizedStringByToken(Func<Language, string, string> orig, Language self, string token)
{
if (token.Length > 15)
{
if (token.Substring(0, 15) != "RISK_OF_OPTIONS")
{
return orig(self, token);
}
if (LanguageEntries.TryGetValue(token, out string value))
{
return value;
}
if (DynamicLanguageEntries.TryGetValue(token, out LanguageStringDelegate value2))
{
return value2();
}
}
return orig(self, token);
}
}
public struct ModMetaData
{
public string Guid;
public string Name;
}
}
namespace RiskOfOptions.Containers
{
internal class Category
{
public readonly string name;
private readonly List<BaseOption> _options = new List<BaseOption>();
private readonly Dictionary<string, int> _identifierOptionMap = new Dictionary<string, int>();
private string _customNameToken;
public string ModGuid { get; }
internal string NameToken
{
get
{
if (!string.IsNullOrEmpty(_customNameToken))
{
return _customNameToken;
}
return ("RISK_OF_OPTIONS." + ModGuid + ".category." + name).Replace(" ", "_").ToUpper();
}
}
internal int OptionCount => _options.Count;
internal BaseOption this[int index] => _options[index];
internal Category(string name, string modGuid)
{
this.name = name;
ModGuid = modGuid;
_customNameToken = string.Empty;
LanguageApi.Add(NameToken, name);
}
internal void AddOption(ref BaseOption option)
{
int count = _options.Count;
_options.Add(option);
_identifierOptionMap.Add(option.Identifier, count);
}
internal BaseOption GetOption(string identifier)
{
return _options[_identifierOptionMap[identifier]];
}
private bool Equals(Category other)
{
return name == other.name;
}
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if (this == obj)
{
return true;
}
if (obj.GetType() == GetType())
{
return Equals((Category)obj);
}
return false;
}
public override int GetHashCode()
{
if (name == null)
{
return 0;
}
return name.GetHashCode();
}
public static bool operator ==(Category left, Category right)
{
if ((object)right != null && (object)left != null)
{
return left.name == right.name;
}
return false;
}
public static bool operator !=(Category left, Category right)
{
return !(left == right);
}
public void SetNameToken(string nameToken)
{
_customNameToken = nameToken;
}
}
internal class ModIndexedOptionCollection : IEnumerable<OptionCollection>, IEnumerable
{
private class OptionCollectionEnumerator : IEnumerator<OptionCollection>, IEnumerator, IDisposable
{
private readonly OptionCollection[] _optionCollections;
private int _position = -1;
public OptionCollection Current
{
get
{
try
{
return _optionCollections[_position];
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
object IEnumerator.Current => Current;
internal OptionCollectionEnumerator(OptionCollection[] optionCollections)
{
_optionCollections = optionCollections;
}
public bool MoveNext()
{
_position++;
return _position < _optionCollections.Length;
}
public void Reset()
{
_position = -1;
}
public void Dispose()
{
}
}
private readonly Dictionary<string, OptionCollection> _optionCollections = new Dictionary<string, OptionCollection>();
private readonly Dictionary<string, string> _identifierModGuidMap = new Dictionary<string, string>();
internal OptionCollection this[string modGuid]
{
get
{
return _optionCollections[modGuid];
}
set
{
_optionCollections[modGuid] = value;
}
}
internal int Count => _optionCollections.Count;
internal void AddOption(ref BaseOption option)
{
if (!_optionCollections.ContainsKey(option.ModGuid))
{
_optionCollections[option.ModGuid] = new OptionCollection(option.ModName, option.ModGuid);
}
_optionCollections[option.ModGuid].AddOption(ref option);
_identifierModGuidMap[option.Identifier] = option.ModGuid;
}
internal BaseOption GetOption(string identifier)
{
string key = _identifierModGuidMap[identifier];
return _optionCollections[key].GetOption(identifier);
}
internal bool ContainsModGuid(string modGuid)
{
return _optionCollections.ContainsKey(modGuid);
}
public IEnumerator<OptionCollection> GetEnumerator()
{
return new OptionCollectionEnumerator(_optionCollections.Values.ToArray());
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
internal class OptionCollection
{
private readonly List<Category> _categories = new List<Category>();
private readonly Dictionary<string, int> _nameCategoryMap = new Dictionary<string, int>();
private readonly Dictionary<string, string> _identifierCategoryNameMap = new Dictionary<string, string>();
public Sprite? icon;
public GameObject? iconPrefab;
private string? _descriptionToken;
public string ModName { get; }
public string ModGuid { get; }
internal int CategoryCount => _categories.Count;
internal string NameToken => ("RISK_OF_OPTIONS." + ModGuid + ".mod_list_button.name").Replace(" ", "_").ToUpper();
internal string DescriptionToken
{
get
{
if (_descriptionToken == null)
{
_descriptionToken = ("RISK_OF_OPTIONS." + ModGuid + ".mod_list_button.description").Replace(" ", "_").ToUpper();
}
return _descriptionToken;
}
set
{
_descriptionToken = value;
}
}
internal Category this[int index] => _categories[index];
internal Category this[string categoryName] => _categories[_nameCategoryMap[categoryName]];
internal OptionCollection(string modName, string modGuid)
{
ModName = modName;
ModGuid = modGuid;
LanguageApi.Add(NameToken, ModName);
}
internal void SetDescriptionText(string descriptionText)
{
LanguageApi.Add(DescriptionToken, descriptionText);
}
internal void AddOption(ref BaseOption option)
{
if (!_nameCategoryMap.ContainsKey(option.Category))
{
int count = _categories.Count;
_categories.Add(new Category(option.Category, ModGuid));
_nameCategoryMap[option.Category] = count;
}
_categories[_nameCategoryMap[option.Category]].AddOption(ref option);
_identifierCategoryNameMap[option.Identifier] = option.Category;
}
internal BaseOption GetOption(string identifier)
{
_ = _identifierCategoryNameMap[identifier];
return _categories[_nameCategoryMap[_identifierCategoryNameMap[identifier]]].GetOption(identifier);
}
}
}
namespace RiskOfOptions.Components.RuntimePrefabs
{
public class CheckBoxPrefab : IRuntimePrefab
{
public GameObject CheckBoxButton { get; private set; }
public void Instantiate(GameObject settingsPanel)
{
CheckBoxButton = Object.Instantiate<GameObject>(Prefabs.boolButton);
GameObject val = Object.Instantiate<GameObject>(((Component)settingsPanel.transform.Find("SafeArea").Find("SubPanelArea").Find("SettingsSubPanel, Audio")
.Find("Scroll View")
.Find("Viewport")
.Find("VerticalLayout")
.Find("SettingsEntryButton, Bool (Audio Focus)")).gameObject);
CarouselController componentInChildren = val.GetComponentInChildren<CarouselController>();
ModSettingsBool component = CheckBoxButton.GetComponent<ModSettingsBool>();
component.checkBoxFalse = componentInChildren.choices[0].customSprite;
component.checkBoxTrue = componentInChildren.choices[1].customSprite;
CheckBoxButton.GetComponent<HGButton>().hoverLanguageTextMeshController = val.GetComponent<HGButton>().hoverLanguageTextMeshController;
Object.DestroyImmediate((Object)(object)val);
}
public void Destroy()
{
Object.DestroyImmediate((Object)(object)CheckBoxButton);
}
}
public class ChoicePrefab : IRuntimePrefab
{
public GameObject ChoiceButton { get; private set; }
public void Instantiate(GameObject settingsPanel)
{
//IL_01ca: 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_020e: Unknown result type (might be due to invalid IL or missing references)
//IL_0213: Unknown result type (might be due to invalid IL or missing references)
//IL_0214: Unknown result type (might be due to invalid IL or missing references)
//IL_021e: Unknown result type (might be due to invalid IL or missing references)
//IL_0229: Unknown result type (might be due to invalid IL or missing references)
//IL_0233: Unknown result type (might be due to invalid IL or missing references)
//IL_023e: Unknown result type (might be due to invalid IL or missing references)
//IL_0252: Unknown result type (might be due to invalid IL or missing references)
//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
//IL_04d9: Unknown result type (might be due to invalid IL or missing references)
//IL_04ee: Unknown result type (might be due to invalid IL or missing references)
//IL_0503: Unknown result type (might be due to invalid IL or missing references)
//IL_0518: Unknown result type (might be due to invalid IL or missing references)
//IL_0522: Unknown result type (might be due to invalid IL or missing references)
//IL_0557: Unknown result type (might be due to invalid IL or missing references)
//IL_056c: Unknown result type (might be due to invalid IL or missing references)
//IL_0581: Unknown result type (might be due to invalid IL or missing references)
//IL_0595: Unknown result type (might be due to invalid IL or missing references)
//IL_05d7: Unknown result type (might be due to invalid IL or missing references)
//IL_05e1: Expected O, but got Unknown
GameObject gameObject = ((Component)settingsPanel.transform.Find("SafeArea").Find("SubPanelArea").Find("SettingsSubPanel, Audio")
.Find("Scroll View")
.Find("Viewport")
.Find("VerticalLayout")
.Find("SettingsEntryButton, Bool (Audio Focus)")).gameObject;
ChoiceButton = Object.Instantiate<GameObject>(((Component)settingsPanel.transform.Find("SafeArea").Find("SubPanelArea").Find("SettingsSubPanel, Video")
.Find("Scroll View")
.Find("Viewport")
.Find("VerticalLayout")
.Find("Option, Resolution")).gameObject);
Transform obj = ChoiceButton.transform.Find("CarouselRect");
Object.DestroyImmediate((Object)(object)((Component)obj).GetComponent<ResolutionControl>());
Object.DestroyImmediate((Object)(object)((Component)obj.Find("RefreshRateDropdown")).gameObject);
Object.DestroyImmediate((Object)(object)((Component)obj.Find("ApplyButton")).gameObject);
Object.DestroyImmediate((Object)(object)ChoiceButton.GetComponent<SelectableDescriptionUpdater>());
Object.DestroyImmediate((Object)(object)ChoiceButton.GetComponent<PanelSkinController>());
Object.DestroyImmediate((Object)(object)ChoiceButton.GetComponent<Image>());
Object.Instantiate<GameObject>(((Component)gameObject.transform.Find("BaseOutline")).gameObject, ChoiceButton.transform);
GameObject val = Object.Instantiate<GameObject>(((Component)gameObject.transform.Find("HoverOutline")).gameObject, ChoiceButton.transform);
ChoiceButton.SetActive(false);
HGButton obj2 = ChoiceButton.AddComponent<HGButton>(gameObject.GetComponent<HGButton>());
obj2.imageOnHover = val.GetComponent<Image>();
ChoiceButton.AddComponent<ButtonSkinController>(gameObject.GetComponent<ButtonSkinController>());
Image targetGraphic = ChoiceButton.AddComponent<Image>(gameObject.GetComponent<Image>());
((Selectable)obj2).targetGraphic = (Graphic)(object)targetGraphic;
((Selectable)obj2).navigation = default(Navigation);
((UnityEventBase)((Button)obj2).onClick).RemoveAllListeners();
Transform val2 = ChoiceButton.transform.Find("Text, Name");
ChoiceButton.AddComponent<DropDownController>().nameLabel = ((Component)val2).GetComponent<LanguageTextMeshController>();
RectTransform val3 = (RectTransform)val2;
val3.anchoredPosition = Vector2.zero;
val3.pivot = new Vector2(0.5f, 0.5f);
val3.sizeDelta = new Vector2(-24f, -8f);
val3.anchorMax = new Vector2(0.5f, 1f);
GameObject gameObject2 = ((Component)ChoiceButton.transform.Find("CarouselRect").Find("ResolutionDropdown")).gameObject;
((Object)gameObject2).name = "Dropdown";
LayoutElement component = gameObject2.GetComponent<LayoutElement>();
component.minWidth = 300f;
component.preferredWidth = 300f;
Object.DestroyImmediate((Object)(object)gameObject2.GetComponent<MPDropdown>());
((Component)gameObject2.transform.Find("Label")).gameObject.AddComponent<LanguageTextMeshController>();
RooDropdown rooDropdown = gameObject2.AddComponent<RooDropdown>();
rooDropdown.defaultColors = ((Selectable)gameObject.GetComponent<HGButton>()).colors;
Object.DestroyImmediate((Object)(object)((Component)gameObject2.transform.Find("Template")).gameObject);
GameObject val4 = Object.Instantiate<GameObject>(gameObject, ChoiceButton.transform);
((Object)val4).name = "Choice Item Prefab";
val4.SetActive(false);
HGButton component2 = val4.GetComponent<HGButton>();
((UnityEventBase)((Button)component2).onClick).RemoveAllListeners();
((MPButton)component2).disablePointerClick = false;
Object.DestroyImmediate((Object)(object)val4.GetComponent<CarouselController>());
Object.DestroyImmediate((Object)(object)((Component)val4.transform.Find("CarouselRect")).gameObject);
LayoutElement component3 = val4.GetComponent<LayoutElement>();
component3.minHeight = 40f;
component3.preferredHeight = 40f;
rooDropdown.choiceItemPrefab = val4;
GameObject val5 = Object.Instantiate<GameObject>(((Component)settingsPanel.transform.Find("SafeArea").Find("SubPanelArea").Find("SettingsSubPanel, Audio")).gameObject, gameObject2.transform);
((Object)val5).name = "Drop Down Parent";
val5.SetActive(false);
Transform obj3 = val5.transform.Find("Scroll View").Find("Viewport").Find("VerticalLayout");
Object.DestroyImmediate((Object)(object)((Component)((Component)obj3).transform.Find("SettingsEntryButton, Bool (Audio Focus)")).gameObject);
Object.DestroyImmediate((Object)(object)((Component)((Component)obj3).transform.Find("SettingsEntryButton, Slider (Master Volume)")).gameObject);
Object.DestroyImmediate((Object)(object)((Component)((Component)obj3).transform.Find("SettingsEntryButton, Slider (SFX Volume)")).gameObject);
Object.DestroyImmediate((Object)(object)((Component)((Component)obj3).transform.Find("SettingsEntryButton, Slider (MSX Volume)")).gameObject);
Object.DestroyImmediate((Object)(object)val5.GetComponent<SettingsPanelController>());
Object.DestroyImmediate((Object)(object)val5.GetComponent<HGButtonHistory>());
Object.DestroyImmediate((Object)(object)val5.GetComponent<OnEnableEvent>());
Object.DestroyImmediate((Object)(object)val5.GetComponent<UIJuice>());
Canvas orAddComponent = val5.GetOrAddComponent<Canvas>();
orAddComponent.overrideSorting = true;
orAddComponent.sortingOrder = 30000;
val5.GetOrAddComponent<GraphicRaycaster>();
val5.GetOrAddComponent<CanvasGroup>().alpha = 1f;
RectTransform component4 = val5.GetComponent<RectTransform>();
component4.anchorMin = new Vector2(0f, 0f);
component4.anchorMax = new Vector2(1f, 0f);
component4.pivot = new Vector2(0.5f, 1f);
component4.sizeDelta = new Vector2(0f, 300f);
component4.anchoredPosition = Vector2.zero;
RectTransform component5 = ((Component)val5.transform.Find("Scroll View").Find("Scrollbar Vertical")).GetComponent<RectTransform>();
component5.anchorMin = new Vector2(1f, 0.02f);
component5.anchorMax = new Vector2(1f, 0.98f);
component5.sizeDelta = new Vector2(24f, 0f);
component5.anchoredPosition = new Vector2(-26f, 0f);
GameObject gameObject3 = ((Component)val5.transform.Find("Scroll View").Find("Viewport").Find("VerticalLayout")).gameObject;
((LayoutGroup)gameObject3.GetComponent<VerticalLayoutGroup>()).padding = new RectOffset(4, 18, 4, 4);
rooDropdown.content = gameObject3;
rooDropdown.template = val5;
((Object)ChoiceButton).name = "Mod Option Prefab, Choice";
}
public void Destroy()
{
Object.DestroyImmediate((Object)(object)ChoiceButton);
}
}
public class FloatFieldPrefab : IRuntimePrefab
{
public GameObject FloatField { get; private set; }
public void Instantiate(GameObject settingsPanel)
{
FloatField = Object.Instantiate<GameObject>(Prefabs.floatFieldButton);
}
public void Destroy()
{
Object.DestroyImmediate((Object)(object)FloatField);
}
}
public class GenericButtonPrefab : IRuntimePrefab
{
public GameObject GenericButton { get; private set; }
public void Instantiate(GameObject settingsPanel)
{
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Expected O, but got Unknown
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Expected O, but got Unknown
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_015d: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_0186: Unknown result type (might be due to invalid IL or missing references)
Transform val = settingsPanel.transform.Find("SafeArea").Find("SubPanelArea").Find("SettingsSubPanel, Audio")
.Find("Scroll View")
.Find("Viewport")
.Find("VerticalLayout");
GenericButton = Object.Instantiate<GameObject>(((Component)val.Find("SettingsEntryButton, Bool (Audio Focus)")).gameObject);
((Object)GenericButton).name = "Mod Option Prefab, GenericButton";
GenericButton.SetActive(false);
Object.DestroyImmediate((Object)(object)GenericButton.GetComponentInChildren<CarouselController>());
Object.DestroyImmediate((Object)(object)((Component)GenericButton.transform.Find("CarouselRect")).gameObject);
GenericButton.AddComponent<GenericButtonController>();
GameObject val2 = new GameObject("ButtonContainer", new Type[3]
{
typeof(RectTransform),
typeof(HorizontalLayoutGroup),
typeof(ContentSizeFitter)
});
val2.transform.SetParent(GenericButton.transform);
HorizontalLayoutGroup component = val2.GetComponent<HorizontalLayoutGroup>();
((LayoutGroup)component).childAlignment = (TextAnchor)5;
((LayoutGroup)component).padding = new RectOffset(8, 8, 0, 0);
((HorizontalOrVerticalLayoutGroup)component).spacing = 8f;
((HorizontalOrVerticalLayoutGroup)component).childForceExpandWidth = true;
((HorizontalOrVerticalLayoutGroup)component).childForceExpandHeight = false;
RectTransform component2 = val2.GetComponent<RectTransform>();
component2.anchorMin = new Vector2(0f, 0f);
component2.anchorMax = new Vector2(1f, 1f);
component2.pivot = new Vector2(1f, 0.5f);
component2.anchoredPosition = new Vector2(-6f, 0f);
ContentSizeFitter component3 = val2.GetComponent<ContentSizeFitter>();
component3.horizontalFit = (FitMode)2;
component3.verticalFit = (FitMode)1;
GameObject obj = Object.Instantiate<GameObject>(((Component)val.Find("SettingsEntryButton, Bool (Audio Focus)")).gameObject, val2.transform);
((Object)obj).name = "Button";
Object.DestroyImmediate((Object)(object)obj.GetComponentInChildren<CarouselController>());
Object.DestroyImmediate((Object)(object)((Component)obj.transform.Find("CarouselRect")).gameObject);
obj.GetComponent<LayoutElement>().minHeight = 48f;
HGButton component4 = obj.GetComponent<HGButton>();
((MPButton)component4).disablePointerClick = false;
((UnityEventBase)((Button)component4).onClick).RemoveAllListeners();
HGTextMeshProUGUI componentInChildren = obj.GetComponentInChildren<HGTextMeshProUGUI>();
((TMP_Text)componentInChildren).enableAutoSizing = false;
((TMP_Text)componentInChildren).fontSizeMin = ((TMP_Text)componentInChildren).fontSize;
((TMP_Text)componentInChildren).fontSizeMax = ((TMP_Text)componentInChildren).fontSize;
}
public void Destroy()
{
Object.DestroyImmediate((Object)(object)GenericButton);
}
}
public class InputFieldPrefab : IRuntimePrefab
{
public GameObject InputField { get; private set; }
public void Instantiate(GameObject settingsPanel)
{
InputField = Object.Instantiate<GameObject>(Prefabs.inputFieldButton);
InputField.SetActive(false);
}
public void Destroy()
{
Object.DestroyImmediate((Object)(object)InputField);
}
}
public class IntFieldPrefab : IRuntimePrefab
{
public GameObject IntField { get; private set; }
public void Instantiate(GameObject settingsPanel)
{
IntField = Object.Instantiate<GameObject>(Prefabs.intFieldButton);
}
public void Destroy()
{
Object.DestroyImmediate((Object)(object)IntField);
}
}
public class IntSliderPrefab : IRuntimePrefab
{
public GameObject IntSlider { get; private set; }
public void Instantiate(GameObject settingsPanel)
{
IntSlider = Object.Instantiate<GameObject>(Prefabs.intSliderButton);
}
public void Destroy()
{
Object.DestroyImmediate((Object)(object)IntSlider);
}
}
public interface IRuntimePrefab
{
void Instantiate(GameObject settingsPanel);
void Destroy();
}
public class KeyBindPrefab : IRuntimePrefab
{
public GameObject KeyBind { get; private set; }
public void Instantiate(GameObject settingsPanel)
{
GameObject gameObject = ((Component)settingsPanel.transform.Find("SafeArea").Find("SubPanelArea").Find("SettingsSubPanel, Controls (M&KB)")
.Find("Scroll View")
.Find("Viewport")
.Find("VerticalLayout")
.Find("SettingsEntryButton, Binding (Jump)")).gameObject;
KeyBind = Object.Instantiate<GameObject>(gameObject);
((Object)KeyBind).name = "Mod Option Prefab, KeyBind";
InputBindingControl componentInChildren = KeyBind.GetComponentInChildren<InputBindingControl>();
KeyBind.AddComponent<KeyBindController>().nameLabel = componentInChildren.nameLabel;
Object.DestroyImmediate((Object)(object)componentInChildren);
Object.DestroyImmediate((Object)(object)KeyBind.GetComponentInChildren<InputBindingDisplayController>());
HGButton[] componentsInChildren = KeyBind.GetComponentsInChildren<HGButton>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
((UnityEventBase)((Button)componentsInChildren[i]).onClick).RemoveAllListeners();
}
}
public void Destroy()
{
Object.DestroyImmediate((Object)(object)KeyBind);
}
}
public class ModOptionsPanelPrefab : IRuntimePrefab
{
[CanBeNull]
private GameObject _optionsPanel;
[CanBeNull]
private GameObject _genericDescriptionPanel;
private GameObject _audioVerticalLayout;
[CanBeNull]
private GameObject _emptyButton;
public GameObject ModListButton { get; private set; }
public GameObject ModOptionsHeaderButton { get; private set; }
public GameObject Canvas { get; private set; }
public GameObject ModListPanel { get; private set; }
public GameObject ModListHighlight { get; private set; }
public GameObject ModDescriptionPanel { get; private set; }
public GameObject CategoryHeader { get; private set; }
public GameObject CategoryHeaderButton { get; private set; }
public GameObject CategoryHeaderHighlight { get; private set; }
public GameObject CategoryPageIndicators { get; private set; }
public GameObject CategoryPageIndicator { get; private set; }
public GameObject CategoryPageIndicatorOutline { get; private set; }
public GameObject CategoryLeftButton { get; private set; }
public GameObject CategoryRightButton { get; private set; }
public GameObject ModOptionsPanel { get; private set; }
public GameObject ModOptionsDescriptionPanel { get; private set; }
public GameObject WarningPanel { get; private set; }
public void Instantiate(GameObject settingsPanel)
{
Transform transform = settingsPanel.transform;
Transform subPanelArea = transform.Find("SafeArea").Find("SubPanelArea");
Transform headerArea = transform.Find("SafeArea").Find("HeaderContainer").Find("Header (JUICED)");
CreateOptionsPanel(subPanelArea);
CreateGenericDescriptionPanel(subPanelArea);
CreateModOptionsHeaderButton(headerArea);
CreateVerticalLayout(subPanelArea);
CreateModListButton();
CreateEmptyButton();
CreateCanvas();
CreateModListPanel(settingsPanel);
CreateModDescriptionPanel();
CreateCategoryHeader();
CreateAdditionalCategoryStuff();
CreateModOptionsPanel();
Object.DestroyImmediate((Object)(object)_emptyButton);
Object.DestroyImmediate((Object)(object)_optionsPanel);