using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GamepadUISwitcher;
using GlobalEnums;
using HarmonyLib;
using InControl;
using Microsoft.CodeAnalysis;
using TeamCherry.Localization;
using UI;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
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("GamepadUISwitcher")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.2.1.0")]
[assembly: AssemblyInformationalVersion("1.2.1+30568967727a9f92357c8b0d3902a18057a6947a")]
[assembly: AssemblyProduct("GamepadUISwitcher")]
[assembly: AssemblyTitle("GamepadUISwitcher")]
[assembly: NeutralResourcesLanguage("EN")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.2.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
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;
}
}
}
public static class MenuResources
{
public static Font TrajanProRegular { get; private set; }
public static Font TrajanProBold { get; private set; }
public static Font Perpetua { get; private set; }
public static Font NotoSerifCJKSCRegular { get; private set; }
public static RuntimeAnimatorController MenuTopFleurAnimator { get; private set; }
public static RuntimeAnimatorController MenuCursorAnimator { get; private set; }
public static RuntimeAnimatorController MenuButtonFlashAnimator { get; private set; }
public static AnimatorOverrideController TextHideShowAnimator { get; private set; }
public static Sprite ScrollbarHandleSprite { get; private set; }
public static Sprite ScrollbarBackgroundSprite { get; private set; }
static MenuResources()
{
ReloadResources();
}
public static void ReloadResources()
{
RuntimeAnimatorController[] array = Resources.FindObjectsOfTypeAll<RuntimeAnimatorController>();
foreach (RuntimeAnimatorController val in array)
{
if ((Object)(object)val != (Object)null)
{
switch (((Object)val).name)
{
case "Menu Animate In Out":
MenuTopFleurAnimator = val;
break;
case "Menu Fleur":
MenuCursorAnimator = val;
break;
case "Menu Flash Effect":
MenuButtonFlashAnimator = val;
break;
}
}
}
AnimatorOverrideController[] array2 = Resources.FindObjectsOfTypeAll<AnimatorOverrideController>();
foreach (AnimatorOverrideController val2 in array2)
{
if ((Object)(object)val2 != (Object)null)
{
AnimatorOverrideController textHideShowAnimator = (AnimatorOverrideController)((!(((Object)val2).name == "TextHideShow")) ? ((object)TextHideShowAnimator) : ((object)val2));
TextHideShowAnimator = textHideShowAnimator;
}
}
Font[] array3 = Resources.FindObjectsOfTypeAll<Font>();
foreach (Font val3 in array3)
{
if ((Object)(object)val3 != (Object)null)
{
switch (((Object)val3).name)
{
case "TrajanPro-Regular":
TrajanProRegular = val3;
break;
case "TrajanPro-Bold":
TrajanProBold = val3;
break;
case "Perpetua":
Perpetua = val3;
break;
case "NotoSerifCJKsc-Regular":
NotoSerifCJKSCRegular = val3;
break;
}
}
}
Sprite[] array4 = Resources.FindObjectsOfTypeAll<Sprite>();
foreach (Sprite val4 in array4)
{
if (!((Object)(object)val4 != (Object)null))
{
continue;
}
string name = ((Object)val4).name;
if (!(name == "scrollbar_fleur_new"))
{
if (name == "scrollbar_single")
{
ScrollbarBackgroundSprite = val4;
}
}
else
{
ScrollbarHandleSprite = val4;
}
}
}
}
namespace BepInEx
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
internal sealed class BepInAutoPluginAttribute : Attribute
{
public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
{
}
}
}
namespace BepInEx.Preloader.Core.Patching
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
internal sealed class PatcherAutoPluginAttribute : Attribute
{
public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
{
}
}
}
namespace UI
{
public class BepinexMenuOptionHorizontal : MenuSelectable, IMoveHandler, IEventSystemHandler, IPointerClickHandler, ISubmitHandler
{
public enum ApplyOnType
{
Scroll,
Submit
}
public Text optionText;
public List<object> optionList;
public string sheetTitle;
public ConfigEntryBase configEntry;
public ApplyOnType applySettingOn;
public CanvasGroup? applyButton;
public int selectedOptionIndex;
private bool hasApplyButton;
private int currentActiveIndex;
private Delegate del;
private bool justUpdatedEntry;
private void OnConfigEntryUpdate(object obj, EventArgs evArgs)
{
if (justUpdatedEntry)
{
justUpdatedEntry = false;
}
else
{
RefreshCurrentIndex();
}
}
private void Awake()
{
hasApplyButton = (Object)(object)applyButton != (Object)null;
}
private void OnEnable()
{
if (configEntry != null)
{
EventInfo? @event = ((object)configEntry).GetType().GetEvent("SettingChanged");
del = Delegate.CreateDelegate(typeof(EventHandler), this, "OnConfigEntryUpdate");
@event.AddEventHandler(configEntry, del);
}
GameManager.instance.RefreshLanguageText += UpdateText;
RefreshMenuControls();
UpdateApplyButton();
}
private void OnDisable()
{
if ((Object)(object)GameManager.instance != (Object)null)
{
GameManager.instance.RefreshLanguageText -= UpdateText;
}
if (configEntry != null)
{
((object)configEntry).GetType().GetEvent("SettingChanged").RemoveEventHandler(configEntry, del);
}
}
public void OnMove(AxisEventData move)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
if (((Selectable)this).interactable && !MoveOption(move.moveDir))
{
((Selectable)this).OnMove(move);
}
}
public void OnPointerClick(PointerEventData eventData)
{
if (((Selectable)this).interactable)
{
PointerClickCheckArrows(eventData);
}
}
public void OnSubmit(BaseEventData eventData)
{
if (((Selectable)this).interactable)
{
if (applySettingOn == ApplyOnType.Submit)
{
ApplySettings();
}
else
{
MoveOption((MoveDirection)2);
}
}
}
protected bool MoveOption(MoveDirection dir)
{
//IL_0000: 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_0005: Invalid comparison between Unknown and I4
if ((int)dir != 0)
{
if ((int)dir != 2)
{
return false;
}
IncrementOption();
}
else
{
DecrementOption();
}
if (Object.op_Implicit((Object)(object)base.uiAudioPlayer))
{
base.uiAudioPlayer.PlaySlider();
}
return true;
}
protected void PointerClickCheckArrows(PointerEventData eventData)
{
if (Object.op_Implicit((Object)(object)base.leftCursor) && IsInside(((Component)base.leftCursor).gameObject, eventData))
{
MoveOption((MoveDirection)0);
}
else if (Object.op_Implicit((Object)(object)base.rightCursor) && IsInside(((Component)base.rightCursor).gameObject, eventData))
{
MoveOption((MoveDirection)2);
}
else
{
MoveOption((MoveDirection)2);
}
}
private bool IsInside(GameObject obj, PointerEventData eventData)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
RectTransform component = obj.GetComponent<RectTransform>();
if (Object.op_Implicit((Object)(object)component) && RectTransformUtility.RectangleContainsScreenPoint(component, eventData.position, Camera.main))
{
return true;
}
return false;
}
private string OptionToString(int index)
{
return Language.Get(((Enum)optionList[index]).GetLocalizationKey(), sheetTitle);
}
public string GetSelectedOptionText()
{
return OptionToString(selectedOptionIndex);
}
public virtual void SetOptionTo(int optionNumber)
{
if (optionNumber >= 0 && optionNumber < optionList.Count)
{
selectedOptionIndex = optionNumber;
UpdateText();
return;
}
Debug.LogErrorFormat("{0} - Trying to select an option outside the list size (index: {1} listsize: {2})", new object[3]
{
((Object)this).name,
optionNumber,
optionList.Count
});
}
protected virtual void UpdateText()
{
if (!Extensions.IsNullOrEmpty<object>((ICollection<object>)optionList) && !((Object)(object)optionText == (Object)null))
{
optionText.text = GetSelectedOptionText();
FixVerticalAlign component = ((Component)optionText).GetComponent<FixVerticalAlign>();
if (Object.op_Implicit((Object)(object)component))
{
component.AlignText();
}
}
}
protected void UpdateSetting()
{
justUpdatedEntry = true;
configEntry.BoxedValue = optionList[selectedOptionIndex];
}
protected void DecrementOption()
{
if (selectedOptionIndex > 0)
{
selectedOptionIndex--;
if (applySettingOn == ApplyOnType.Scroll)
{
UpdateSetting();
}
UpdateText();
}
else if (selectedOptionIndex == 0)
{
selectedOptionIndex = optionList.Count - 1;
if (applySettingOn == ApplyOnType.Scroll)
{
UpdateSetting();
}
UpdateText();
}
UpdateApplyButton();
}
protected void IncrementOption()
{
if (selectedOptionIndex >= 0 && selectedOptionIndex < optionList.Count - 1)
{
selectedOptionIndex++;
if (applySettingOn == ApplyOnType.Scroll)
{
UpdateSetting();
}
UpdateText();
}
else if (selectedOptionIndex == optionList.Count - 1)
{
selectedOptionIndex = 0;
if (applySettingOn == ApplyOnType.Scroll)
{
UpdateSetting();
}
UpdateText();
}
UpdateApplyButton();
}
public void RefreshMenuControls()
{
RefreshCurrentIndex();
UpdateText();
}
public virtual void ApplySettings()
{
if (selectedOptionIndex >= 0)
{
UpdateSetting();
RefreshCurrentIndex();
HideApplyButton();
}
}
public virtual void UpdateApplyButton()
{
if (currentActiveIndex == selectedOptionIndex)
{
HideApplyButton();
}
else
{
ShowApplyButton();
}
}
public virtual void RefreshCurrentIndex()
{
if (configEntry != null)
{
int num = optionList.IndexOf(configEntry.BoxedValue);
if (num == -1)
{
configEntry.BoxedValue = optionList[0];
SetOptionTo(0);
}
else
{
SetOptionTo(num);
}
}
currentActiveIndex = selectedOptionIndex;
}
protected void HideApplyButton()
{
if (hasApplyButton)
{
applyButton.alpha = 0f;
applyButton.interactable = false;
applyButton.blocksRaycasts = false;
}
}
protected void ShowApplyButton()
{
if (applySettingOn != 0 && hasApplyButton)
{
applyButton.alpha = 1f;
applyButton.interactable = true;
applyButton.blocksRaycasts = true;
}
}
}
public static class Objects
{
public static class FontSize
{
public const int OptionLabel = 46;
public const int OptionText = 38;
public const int OptionDescription = 41;
public const int MenuButton = 45;
}
public static GameObject CreateMenuButton(string buttonId, string label, MenuButtonType actionType, Action<BaseEventData> submitAction)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Expected O, but got Unknown
//IL_0023: 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_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Expected O, but got Unknown
//IL_0050: 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_0073: Expected O, but got Unknown
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Expected O, but got Unknown
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_015a: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0170: Unknown result type (might be due to invalid IL or missing references)
//IL_0185: Unknown result type (might be due to invalid IL or missing references)
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
//IL_01d9: 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_0219: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Unknown result type (might be due to invalid IL or missing references)
//IL_023f: Unknown result type (might be due to invalid IL or missing references)
//IL_0254: Unknown result type (might be due to invalid IL or missing references)
//IL_0269: Unknown result type (might be due to invalid IL or missing references)
//IL_027d: Unknown result type (might be due to invalid IL or missing references)
//IL_0282: Unknown result type (might be due to invalid IL or missing references)
//IL_028c: Unknown result type (might be due to invalid IL or missing references)
//IL_0293: Unknown result type (might be due to invalid IL or missing references)
Action<BaseEventData> submitAction2 = submitAction;
GameObject val = new GameObject(buttonId);
val.AddComponent<RectTransform>();
MenuButton val2 = val.AddComponent<MenuButton>();
val2.buttonType = actionType;
Navigation navigation = default(Navigation);
((Navigation)(ref navigation)).mode = (Mode)4;
((Selectable)val2).navigation = navigation;
EventTrigger obj = val.AddComponent<EventTrigger>();
Entry val3 = new Entry();
val3.eventID = (EventTriggerType)15;
((UnityEvent<BaseEventData>)(object)val3.callback).AddListener((UnityAction<BaseEventData>)delegate(BaseEventData data)
{
submitAction2(data);
});
Entry val4 = new Entry();
val4.eventID = (EventTriggerType)4;
((UnityEvent<BaseEventData>)(object)val4.callback).AddListener((UnityAction<BaseEventData>)delegate(BaseEventData data)
{
submitAction2(data);
});
obj.triggers.AddRange(new <>z__ReadOnlyArray<Entry>((Entry[])(object)new Entry[2] { val3, val4 }));
GameObject val5 = new GameObject("Menu Button Text");
RectTransform obj2 = val5.AddComponent<RectTransform>();
obj2.anchorMax = Vector2.one;
obj2.anchorMin = Vector2.zero;
Text obj3 = val5.AddComponent<Text>();
obj3.font = MenuResources.TrajanProBold;
obj3.fontSize = 45;
obj3.lineSpacing = -0.33f;
obj3.text = label;
obj3.alignment = (TextAnchor)4;
ChangeTextFontScaleOnHandHeld obj4 = val5.AddComponent<ChangeTextFontScaleOnHandHeld>();
obj4.normalSize = 45f;
obj4.handHeldSize = 45f;
val5.AddComponent<FixVerticalAlign>();
ContentSizeFitter obj5 = val5.AddComponent<ContentSizeFitter>();
obj5.horizontalFit = (FitMode)2;
obj5.verticalFit = (FitMode)0;
val5.transform.SetParent(val.transform);
GameObject val6 = new GameObject("CursorRight");
RectTransform obj6 = val6.AddComponent<RectTransform>();
obj6.sizeDelta = new Vector2(164f, 119f);
obj6.anchorMin = new Vector2(1f, 0.5f);
obj6.anchorMax = new Vector2(1f, 0.5f);
obj6.anchoredPosition = new Vector2(70f, 0f);
((Transform)obj6).localScale = Vector2.op_Implicit(new Vector2(-0.9f, 0.9f));
val6.AddComponent<Image>();
Animator val7 = val6.AddComponent<Animator>();
val7.runtimeAnimatorController = MenuResources.MenuCursorAnimator;
val7.updateMode = (AnimatorUpdateMode)2;
((MenuSelectable)val2).rightCursor = val7;
val6.transform.SetParent(val5.transform, false);
GameObject val8 = new GameObject("CursorLeft");
RectTransform obj7 = val8.AddComponent<RectTransform>();
obj7.sizeDelta = new Vector2(164f, 119f);
obj7.anchorMin = new Vector2(0f, 0.5f);
obj7.anchorMax = new Vector2(0f, 0.5f);
obj7.anchoredPosition = new Vector2(-70f, 0f);
((Transform)obj7).localScale = Vector2.op_Implicit(new Vector2(0.9f, 0.9f));
val8.AddComponent<Image>();
Animator val9 = val8.AddComponent<Animator>();
val9.runtimeAnimatorController = MenuResources.MenuCursorAnimator;
val9.updateMode = (AnimatorUpdateMode)2;
((MenuSelectable)val2).leftCursor = val9;
val8.transform.SetParent(val5.transform, false);
return val;
}
public static GameObject CreateBepinexConfigOptionTranslated<T>(string objectId, string tlSheet, string labelKey, string descriptionKey, T[] options, ConfigEntry<T> entry)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: 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_007a: 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_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
//IL_016a: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
//IL_0208: Unknown result type (might be due to invalid IL or missing references)
//IL_0223: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Unknown result type (might be due to invalid IL or missing references)
//IL_024f: Unknown result type (might be due to invalid IL or missing references)
//IL_0254: Unknown result type (might be due to invalid IL or missing references)
//IL_0265: Unknown result type (might be due to invalid IL or missing references)
//IL_027a: Unknown result type (might be due to invalid IL or missing references)
//IL_028f: Unknown result type (might be due to invalid IL or missing references)
//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
//IL_0308: Unknown result type (might be due to invalid IL or missing references)
//IL_030d: Unknown result type (might be due to invalid IL or missing references)
//IL_031e: Unknown result type (might be due to invalid IL or missing references)
//IL_0333: Unknown result type (might be due to invalid IL or missing references)
//IL_0348: Unknown result type (might be due to invalid IL or missing references)
//IL_035d: Unknown result type (might be due to invalid IL or missing references)
//IL_0371: Unknown result type (might be due to invalid IL or missing references)
//IL_0376: Unknown result type (might be due to invalid IL or missing references)
//IL_0380: Unknown result type (might be due to invalid IL or missing references)
//IL_0387: Unknown result type (might be due to invalid IL or missing references)
//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
//IL_03de: Unknown result type (might be due to invalid IL or missing references)
//IL_03f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0408: Unknown result type (might be due to invalid IL or missing references)
//IL_041d: Unknown result type (might be due to invalid IL or missing references)
//IL_0431: Unknown result type (might be due to invalid IL or missing references)
//IL_043b: Unknown result type (might be due to invalid IL or missing references)
//IL_0474: Unknown result type (might be due to invalid IL or missing references)
//IL_0484: Unknown result type (might be due to invalid IL or missing references)
//IL_0489: Unknown result type (might be due to invalid IL or missing references)
//IL_048e: Unknown result type (might be due to invalid IL or missing references)
//IL_04aa: Unknown result type (might be due to invalid IL or missing references)
//IL_04c5: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject(objectId);
val.SetActive(false);
val.AddComponent<RectTransform>().sizeDelta = new Vector2(1100f, 60f);
val.AddComponent<CanvasRenderer>();
BepinexMenuOptionHorizontal bepinexMenuOptionHorizontal = val.AddComponent<BepinexMenuOptionHorizontal>();
bepinexMenuOptionHorizontal.optionList = options.Cast<object>().ToList();
((Selectable)bepinexMenuOptionHorizontal).transition = (Transition)0;
bepinexMenuOptionHorizontal.configEntry = (ConfigEntryBase)(object)entry;
Navigation navigation = default(Navigation);
((Navigation)(ref navigation)).mode = (Mode)4;
((Selectable)bepinexMenuOptionHorizontal).navigation = navigation;
bepinexMenuOptionHorizontal.sheetTitle = tlSheet;
GameObject val2 = new GameObject("Menu Option Label");
val2.SetActive(false);
RectTransform obj = val2.AddComponent<RectTransform>();
obj.anchoredPosition = new Vector2(450f, 0f);
obj.sizeDelta = new Vector2(900f, 1f);
obj.anchorMax = new Vector2(0f, 1f);
obj.anchorMin = new Vector2(0f, 0f);
Text val3 = val2.AddComponent<Text>();
val3.alignment = (TextAnchor)3;
val3.font = MenuResources.TrajanProBold;
val3.fontSize = 46;
val3.lineSpacing = -0.33f;
val3.horizontalOverflow = (HorizontalWrapMode)1;
AutoLocalizeTextUI obj2 = val2.AddComponent<AutoLocalizeTextUI>();
obj2.textField = val3;
obj2.text = new LocalisedString(tlSheet, labelKey);
ChangeTextFontScaleOnHandHeld obj3 = val2.AddComponent<ChangeTextFontScaleOnHandHeld>();
obj3.handHeldSize = 46f;
obj3.normalSize = 46f;
val2.AddComponent<FixVerticalAlign>();
val2.transform.SetParent(val.transform, false);
val2.SetActive(true);
GameObject val4 = new GameObject("Menu Option Text");
val4.SetActive(false);
RectTransform obj4 = val4.AddComponent<RectTransform>();
obj4.anchoredPosition = new Vector2(-100f, 0f);
obj4.sizeDelta = new Vector2(200f, 1f);
obj4.anchorMax = new Vector2(1f, 1f);
obj4.anchorMin = new Vector2(1f, 0f);
Text val5 = val4.AddComponent<Text>();
val5.alignment = (TextAnchor)5;
val5.font = MenuResources.TrajanProBold;
val5.fontSize = 38;
val5.lineSpacing = -0.33f;
val5.horizontalOverflow = (HorizontalWrapMode)1;
ChangeTextFontScaleOnHandHeld obj5 = val4.AddComponent<ChangeTextFontScaleOnHandHeld>();
obj5.handHeldSize = 38f;
obj5.normalSize = 38f;
val4.AddComponent<FixVerticalAlign>();
val4.transform.SetParent(val.transform, false);
bepinexMenuOptionHorizontal.optionText = val5;
val4.SetActive(true);
GameObject val6 = new GameObject("CursorRight");
RectTransform obj6 = val6.AddComponent<RectTransform>();
obj6.sizeDelta = new Vector2(164f, 119f);
obj6.anchorMin = new Vector2(1f, 0.5f);
obj6.anchorMax = new Vector2(1f, 0.5f);
obj6.anchoredPosition = new Vector2(70f, 0f);
((Transform)obj6).localScale = Vector2.op_Implicit(new Vector2(-0.9f, 0.9f));
val6.AddComponent<Image>();
Animator val7 = val6.AddComponent<Animator>();
val7.runtimeAnimatorController = MenuResources.MenuCursorAnimator;
val7.updateMode = (AnimatorUpdateMode)2;
((MenuSelectable)bepinexMenuOptionHorizontal).rightCursor = val7;
val6.transform.SetParent(val.transform, false);
GameObject val8 = new GameObject("CursorLeft");
RectTransform obj7 = val8.AddComponent<RectTransform>();
obj7.sizeDelta = new Vector2(164f, 119f);
obj7.anchorMin = new Vector2(0f, 0.5f);
obj7.anchorMax = new Vector2(0f, 0.5f);
obj7.anchoredPosition = new Vector2(-70f, 0f);
((Transform)obj7).localScale = Vector2.op_Implicit(new Vector2(0.9f, 0.9f));
val8.AddComponent<Image>();
Animator val9 = val8.AddComponent<Animator>();
val9.runtimeAnimatorController = MenuResources.MenuCursorAnimator;
val9.updateMode = (AnimatorUpdateMode)2;
((MenuSelectable)bepinexMenuOptionHorizontal).leftCursor = val9;
val8.transform.SetParent(val.transform, false);
GameObject val10 = new GameObject("Description");
val10.SetActive(false);
RectTransform obj8 = val10.AddComponent<RectTransform>();
obj8.anchoredPosition = new Vector2(2f, -55.8f);
obj8.sizeDelta = new Vector2(875.1f, 61f);
obj8.anchorMax = new Vector2(0f, 0.5f);
obj8.anchorMin = new Vector2(0f, 0.5f);
obj8.pivot = new Vector2(0f, 0.5f);
Text val11 = val10.AddComponent<Text>();
val11.alignment = (TextAnchor)3;
val11.font = MenuResources.Perpetua;
val11.fontSize = 41;
val11.lineSpacing = 1f;
val11.horizontalOverflow = (HorizontalWrapMode)1;
AutoLocalizeTextUI obj9 = val10.AddComponent<AutoLocalizeTextUI>();
obj9.textField = val11;
obj9.text = new LocalisedString(tlSheet, descriptionKey);
Animator val12 = val10.AddComponent<Animator>();
val12.runtimeAnimatorController = (RuntimeAnimatorController)(object)MenuResources.TextHideShowAnimator;
val12.updateMode = (AnimatorUpdateMode)2;
ChangeTextFontScaleOnHandHeld obj10 = val10.AddComponent<ChangeTextFontScaleOnHandHeld>();
obj10.handHeldSize = 41f;
obj10.normalSize = 41f;
val10.transform.SetParent(val.transform, false);
((MenuSelectable)bepinexMenuOptionHorizontal).descriptionText = val12;
val10.SetActive(true);
val.SetActive(true);
return val;
}
}
public static class Utils
{
public static void Append<T>(ref T[] arr, T newElem)
{
T[] array = new T[arr.Length + 1];
for (int i = 0; i < arr.Length; i++)
{
array[i] = arr[i];
}
array[arr.Length] = newElem;
arr = array;
}
public static void InsertAfter<T>(ref T[] arr, T existingElem, T newElem)
{
T[] array = new T[arr.Length + 1];
int i;
for (i = 0; i < arr.Length; i++)
{
T val = (array[i] = arr[i]);
if (val != null && val.Equals(existingElem))
{
break;
}
}
if (i != arr.Length)
{
array[++i] = newElem;
for (; i < arr.Length; i++)
{
array[i + 1] = arr[i];
}
arr = array;
}
}
}
}
namespace GamepadUISwitcher
{
[HarmonyPatch(typeof(UIButtonSkins), "GetButtonSkinFor", new Type[] { typeof(InputControlType) })]
public class ButtonSkinsPatch
{
[HarmonyPrefix]
public static void Prefix(ref GamepadType __state, ref InputHandler ___ih)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Expected I4, but got Unknown
//IL_000b: 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_001a: Unknown result type (might be due to invalid IL or missing references)
__state = (GamepadType)(int)___ih.activeGamepadType;
if ((int)___ih.activeGamepadType != 0)
{
___ih.activeGamepadType = GamepadUISwitcherPlugin.SelectedGamepadType;
}
}
[HarmonyPostfix]
public static void Postfix(ref GamepadType __state, ref InputHandler ___ih)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
___ih.activeGamepadType = __state;
}
}
public class ControllerDetectPatch
{
[HarmonyPatch(typeof(ControllerDetect), "ShowController")]
[HarmonyPrefix]
public static void ShowAltController(ref GamepadType gamepadType)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected I4, but got Unknown
if ((int)UIManager.instance.ih.activeGamepadType != 0)
{
gamepadType = (GamepadType)(int)GamepadUISwitcherPlugin.SelectedGamepadType;
}
}
}
public static class EnumExt
{
public static string GetLocalizationKey<T>(this T value) where T : Enum
{
Type type = value.GetType();
if ((object)type == null || !type.IsEnum)
{
throw new ArgumentException("Value must be an enum");
}
string text = type.GetCustomAttribute<LocalizationKeyPrefixAttribute>()?.KeyPrefix ?? string.Empty;
string text2 = value.ToString();
MemberInfo[] member = type.GetMember(text2);
if (member.Length == 0)
{
return text + text2;
}
LocalizationKeyAttribute customAttribute = member.First().GetCustomAttribute<LocalizationKeyAttribute>();
if (customAttribute == null)
{
return text + text2;
}
if (customAttribute.IgnorePrefix)
{
return customAttribute.Key;
}
return text + customAttribute.Key;
}
}
public static class FaceButtonSprites
{
public class Buttons
{
public Sprite a;
public Sprite b;
public Sprite x;
public Sprite y;
}
public class PlaystationButtons
{
public Sprite cross;
public Sprite circle;
public Sprite triangle;
public Sprite square;
}
public static Buttons nintendo;
public static PlaystationButtons playstation;
public static Buttons xbox;
public static void LoadSpritesFromUIManager()
{
UIButtonSkins uiButtonSkins = UIManager.instance.uiButtonSkins;
xbox.a = uiButtonSkins.a;
xbox.b = uiButtonSkins.b;
xbox.x = uiButtonSkins.x;
xbox.y = uiButtonSkins.y;
playstation.cross = uiButtonSkins.ps4x;
playstation.circle = uiButtonSkins.ps4circle;
playstation.square = uiButtonSkins.ps4square;
playstation.triangle = uiButtonSkins.ps4triangle;
nintendo.a = uiButtonSkins.switchHidA;
nintendo.b = uiButtonSkins.switchHidB;
nintendo.x = uiButtonSkins.switchHidX;
nintendo.y = uiButtonSkins.switchHidY;
}
static FaceButtonSprites()
{
playstation = new PlaystationButtons();
xbox = new Buttons();
nintendo = new Buttons();
LoadSpritesFromUIManager();
}
}
[LocalizationKeyPrefix("SKIN_OPTION.VALUE.")]
public enum GamepadButtonSkinOpt
{
Auto,
Xbox360,
XboxOne,
XboxSeriesX,
DualShock4,
DualSense,
SwitchJoycons,
Switch2Joycons,
SwitchPro,
Switch2Pro,
SteamDeck
}
[LocalizationKeyPrefix("SWAP_OPTION.VALUE.")]
public enum GamepadButtonSwapOption
{
None,
AB_XY,
AB,
XY,
AX_BY,
AX,
BY,
BX_AY,
BX,
AY
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("capitalistspz.gamepaduiswitcher-silksong", "GamepadUISwitcher", "1.2.1")]
public class GamepadUISwitcherPlugin : BaseUnityPlugin
{
internal static ManualLogSource Logger;
internal static ConfigEntry<GamepadButtonSkinOpt> gamepadSkinConfig;
internal static ConfigEntry<GamepadButtonSwapOption> gamepadButtonSwapConfig;
public const string Id = "capitalistspz.gamepaduiswitcher-silksong";
internal static GamepadType SelectedGamepadType => (GamepadType)(gamepadSkinConfig.Value switch
{
GamepadButtonSkinOpt.Xbox360 => 3,
GamepadButtonSkinOpt.XboxOne => 2,
GamepadButtonSkinOpt.XboxSeriesX => 12,
GamepadButtonSkinOpt.DualShock4 => 4,
GamepadButtonSkinOpt.DualSense => 11,
GamepadButtonSkinOpt.SwitchJoycons => 9,
GamepadButtonSkinOpt.Switch2Joycons => 14,
GamepadButtonSkinOpt.SwitchPro => 10,
GamepadButtonSkinOpt.Switch2Pro => 15,
GamepadButtonSkinOpt.SteamDeck => 13,
_ => UIManager.instance.ih.activeGamepadType,
});
public static string Name => "GamepadUISwitcher";
public static string Version => "1.2.1";
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
gamepadSkinConfig = ((BaseUnityPlugin)this).Config.Bind<GamepadButtonSkinOpt>("UI", "Gamepad Skin", GamepadButtonSkinOpt.Auto, (ConfigDescription)null);
gamepadSkinConfig.SettingChanged += delegate
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
GamepadType val = (GamepadType)0;
UIManager.instance.controllerDetect.ShowController(val);
UIManager.instance.uiButtonSkins.RefreshButtonMappings();
};
gamepadButtonSwapConfig = ((BaseUnityPlugin)this).Config.Bind<GamepadButtonSwapOption>("UI", "Button Swap", GamepadButtonSwapOption.None, (ConfigDescription)null);
gamepadButtonSwapConfig.SettingChanged += delegate
{
SetButtonSwapOptions();
UIManager.instance.controllerDetect.ShowController((GamepadType)0);
};
Harmony obj = Harmony.CreateAndPatchAll(typeof(UIManagerPatch), (string)null);
obj.PatchAll(typeof(ButtonSkinsPatch));
obj.PatchAll(typeof(ControllerDetectPatch));
Logger.LogInfo((object)("Plugin " + Name + " (capitalistspz.gamepaduiswitcher-silksong) has loaded!"));
}
public static void SetButtonSwapOptions()
{
//IL_0194: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
//IL_03e0: Unknown result type (might be due to invalid IL or missing references)
//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
//IL_04df: Unknown result type (might be due to invalid IL or missing references)
//IL_04ec: Unknown result type (might be due to invalid IL or missing references)
//IL_04f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0505: Unknown result type (might be due to invalid IL or missing references)
//IL_05f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0605: Unknown result type (might be due to invalid IL or missing references)
//IL_0612: Unknown result type (might be due to invalid IL or missing references)
//IL_061e: Unknown result type (might be due to invalid IL or missing references)
//IL_0711: Unknown result type (might be due to invalid IL or missing references)
//IL_071e: Unknown result type (might be due to invalid IL or missing references)
//IL_072b: Unknown result type (might be due to invalid IL or missing references)
//IL_0737: Unknown result type (might be due to invalid IL or missing references)
//IL_082a: Unknown result type (might be due to invalid IL or missing references)
//IL_0837: Unknown result type (might be due to invalid IL or missing references)
//IL_0844: Unknown result type (might be due to invalid IL or missing references)
//IL_0850: Unknown result type (might be due to invalid IL or missing references)
//IL_0943: Unknown result type (might be due to invalid IL or missing references)
//IL_0950: Unknown result type (might be due to invalid IL or missing references)
//IL_095d: Unknown result type (might be due to invalid IL or missing references)
//IL_0969: Unknown result type (might be due to invalid IL or missing references)
//IL_0a5c: Unknown result type (might be due to invalid IL or missing references)
//IL_0a69: Unknown result type (might be due to invalid IL or missing references)
//IL_0a76: Unknown result type (might be due to invalid IL or missing references)
//IL_0a82: Unknown result type (might be due to invalid IL or missing references)
//IL_0b75: Unknown result type (might be due to invalid IL or missing references)
//IL_0b82: Unknown result type (might be due to invalid IL or missing references)
//IL_0b8f: Unknown result type (might be due to invalid IL or missing references)
//IL_0b9b: Unknown result type (might be due to invalid IL or missing references)
string[] source = new string[9] { "Xbox360Buttons", "XboxOneButtons", "PS4Buttons", "SwitchJoyconButtons", "Switch2JoyconButtons", "SwitchProControllerButtons", "PS5Buttons", "XboxSeriesXButtons", "SteamDeckButtons" };
UIButtonSkins uiButtonSkins = UIManager.instance.uiButtonSkins;
IEnumerable<ControllerButtonPositions> enumerable = source.Select((string objName) => ((Component)((Component)UIManager.instance.gamepadMenuScreen).transform.Find("Content/ControllerProfiles/" + objName)).GetComponent<ControllerButtonPositions>());
switch (gamepadButtonSwapConfig.Value)
{
case GamepadButtonSwapOption.None:
uiButtonSkins.a = FaceButtonSprites.xbox.a;
uiButtonSkins.b = FaceButtonSprites.xbox.b;
uiButtonSkins.x = FaceButtonSprites.xbox.x;
uiButtonSkins.y = FaceButtonSprites.xbox.y;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.cross;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.circle;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.square;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.triangle;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.a;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.b;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.x;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.y;
{
foreach (ControllerButtonPositions item in enumerable)
{
item.action1.controllerButton = (InputControlType)19;
item.action2.controllerButton = (InputControlType)20;
item.action3.controllerButton = (InputControlType)21;
item.action4.controllerButton = (InputControlType)22;
}
break;
}
case GamepadButtonSwapOption.AB_XY:
uiButtonSkins.a = FaceButtonSprites.xbox.b;
uiButtonSkins.b = FaceButtonSprites.xbox.a;
uiButtonSkins.x = FaceButtonSprites.xbox.y;
uiButtonSkins.y = FaceButtonSprites.xbox.x;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.circle;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.cross;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.triangle;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.square;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.b;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.a;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.y;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.x;
{
foreach (ControllerButtonPositions item2 in enumerable)
{
item2.action1.controllerButton = (InputControlType)20;
item2.action2.controllerButton = (InputControlType)19;
item2.action3.controllerButton = (InputControlType)22;
item2.action4.controllerButton = (InputControlType)21;
}
break;
}
case GamepadButtonSwapOption.AB:
uiButtonSkins.a = FaceButtonSprites.xbox.b;
uiButtonSkins.b = FaceButtonSprites.xbox.a;
uiButtonSkins.x = FaceButtonSprites.xbox.x;
uiButtonSkins.y = FaceButtonSprites.xbox.y;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.circle;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.cross;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.square;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.triangle;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.b;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.a;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.x;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.y;
{
foreach (ControllerButtonPositions item3 in enumerable)
{
item3.action1.controllerButton = (InputControlType)20;
item3.action2.controllerButton = (InputControlType)19;
item3.action3.controllerButton = (InputControlType)21;
item3.action4.controllerButton = (InputControlType)22;
}
break;
}
case GamepadButtonSwapOption.XY:
uiButtonSkins.a = FaceButtonSprites.xbox.a;
uiButtonSkins.b = FaceButtonSprites.xbox.b;
uiButtonSkins.x = FaceButtonSprites.xbox.y;
uiButtonSkins.y = FaceButtonSprites.xbox.x;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.cross;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.circle;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.triangle;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.square;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.a;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.b;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.y;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.x;
{
foreach (ControllerButtonPositions item4 in enumerable)
{
item4.action1.controllerButton = (InputControlType)19;
item4.action2.controllerButton = (InputControlType)20;
item4.action3.controllerButton = (InputControlType)22;
item4.action4.controllerButton = (InputControlType)21;
}
break;
}
case GamepadButtonSwapOption.AX_BY:
uiButtonSkins.a = FaceButtonSprites.xbox.x;
uiButtonSkins.b = FaceButtonSprites.xbox.y;
uiButtonSkins.x = FaceButtonSprites.xbox.a;
uiButtonSkins.y = FaceButtonSprites.xbox.b;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.square;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.triangle;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.cross;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.circle;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.x;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.y;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.a;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.b;
{
foreach (ControllerButtonPositions item5 in enumerable)
{
item5.action1.controllerButton = (InputControlType)21;
item5.action2.controllerButton = (InputControlType)22;
item5.action3.controllerButton = (InputControlType)19;
item5.action4.controllerButton = (InputControlType)20;
}
break;
}
case GamepadButtonSwapOption.AX:
uiButtonSkins.a = FaceButtonSprites.xbox.x;
uiButtonSkins.b = FaceButtonSprites.xbox.b;
uiButtonSkins.x = FaceButtonSprites.xbox.x;
uiButtonSkins.y = FaceButtonSprites.xbox.y;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.square;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.circle;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.cross;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.triangle;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.x;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.b;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.a;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.y;
{
foreach (ControllerButtonPositions item6 in enumerable)
{
item6.action1.controllerButton = (InputControlType)21;
item6.action2.controllerButton = (InputControlType)20;
item6.action3.controllerButton = (InputControlType)19;
item6.action4.controllerButton = (InputControlType)22;
}
break;
}
case GamepadButtonSwapOption.BY:
uiButtonSkins.a = FaceButtonSprites.xbox.a;
uiButtonSkins.b = FaceButtonSprites.xbox.y;
uiButtonSkins.x = FaceButtonSprites.xbox.x;
uiButtonSkins.y = FaceButtonSprites.xbox.b;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.cross;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.triangle;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.square;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.circle;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.a;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.y;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.x;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.b;
{
foreach (ControllerButtonPositions item7 in enumerable)
{
item7.action1.controllerButton = (InputControlType)19;
item7.action2.controllerButton = (InputControlType)22;
item7.action3.controllerButton = (InputControlType)21;
item7.action4.controllerButton = (InputControlType)20;
}
break;
}
case GamepadButtonSwapOption.BX_AY:
uiButtonSkins.a = FaceButtonSprites.xbox.y;
uiButtonSkins.b = FaceButtonSprites.xbox.x;
uiButtonSkins.x = FaceButtonSprites.xbox.b;
uiButtonSkins.y = FaceButtonSprites.xbox.a;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.triangle;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.square;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.circle;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.cross;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.y;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.x;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.b;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.a;
{
foreach (ControllerButtonPositions item8 in enumerable)
{
item8.action1.controllerButton = (InputControlType)22;
item8.action2.controllerButton = (InputControlType)21;
item8.action3.controllerButton = (InputControlType)20;
item8.action4.controllerButton = (InputControlType)19;
}
break;
}
case GamepadButtonSwapOption.BX:
uiButtonSkins.a = FaceButtonSprites.xbox.a;
uiButtonSkins.b = FaceButtonSprites.xbox.x;
uiButtonSkins.x = FaceButtonSprites.xbox.b;
uiButtonSkins.y = FaceButtonSprites.xbox.y;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.cross;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.square;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.circle;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.triangle;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.a;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.x;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.b;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.y;
{
foreach (ControllerButtonPositions item9 in enumerable)
{
item9.action1.controllerButton = (InputControlType)19;
item9.action2.controllerButton = (InputControlType)21;
item9.action3.controllerButton = (InputControlType)20;
item9.action4.controllerButton = (InputControlType)22;
}
break;
}
case GamepadButtonSwapOption.AY:
uiButtonSkins.a = FaceButtonSprites.xbox.y;
uiButtonSkins.b = FaceButtonSprites.xbox.b;
uiButtonSkins.x = FaceButtonSprites.xbox.x;
uiButtonSkins.y = FaceButtonSprites.xbox.a;
uiButtonSkins.ps4x = FaceButtonSprites.playstation.triangle;
uiButtonSkins.ps4circle = FaceButtonSprites.playstation.circle;
uiButtonSkins.ps4square = FaceButtonSprites.playstation.square;
uiButtonSkins.ps4triangle = FaceButtonSprites.playstation.cross;
uiButtonSkins.switchHidA = FaceButtonSprites.nintendo.y;
uiButtonSkins.switchHidB = FaceButtonSprites.nintendo.b;
uiButtonSkins.switchHidX = FaceButtonSprites.nintendo.x;
uiButtonSkins.switchHidY = FaceButtonSprites.nintendo.a;
{
foreach (ControllerButtonPositions item10 in enumerable)
{
item10.action1.controllerButton = (InputControlType)22;
item10.action2.controllerButton = (InputControlType)20;
item10.action3.controllerButton = (InputControlType)21;
item10.action4.controllerButton = (InputControlType)19;
}
break;
}
default:
throw new ArgumentOutOfRangeException();
}
}
}
[AttributeUsage(AttributeTargets.Field)]
public class LocalizationKeyAttribute : Attribute
{
public string Key { get; }
public bool IgnorePrefix { get; }
public LocalizationKeyAttribute(string key, bool ignorePrefix = false)
{
Key = key;
IgnorePrefix = ignorePrefix;
base..ctor();
}
}
[AttributeUsage(AttributeTargets.Enum)]
public class LocalizationKeyPrefixAttribute : Attribute
{
public string KeyPrefix { get; }
public LocalizationKeyPrefixAttribute(string keyPrefix)
{
KeyPrefix = keyPrefix;
base..ctor();
}
}
public class UIManagerPatch
{
[HarmonyPatch(typeof(UIManager), "Awake")]
[HarmonyPostfix]
public static void OnAwake()
{
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Expected O, but got Unknown
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: Expected O, but got Unknown
//IL_018a: Unknown result type (might be due to invalid IL or missing references)
//IL_0191: Expected O, but got Unknown
//IL_0208: Unknown result type (might be due to invalid IL or missing references)
//IL_020d: Unknown result type (might be due to invalid IL or missing references)
//IL_021a: Unknown result type (might be due to invalid IL or missing references)
//IL_0221: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Expected O, but got Unknown
MenuScreen gamepadMenuScreen = UIManager.instance.gamepadMenuScreen;
VerticalLayoutGroup obj = Extensions.AddComponentIfNotPresent<VerticalLayoutGroup>(((Component)gamepadMenuScreen).gameObject);
((LayoutGroup)obj).childAlignment = (TextAnchor)4;
((HorizontalOrVerticalLayoutGroup)obj).childForceExpandHeight = false;
((HorizontalOrVerticalLayoutGroup)obj).childForceExpandWidth = false;
((HorizontalOrVerticalLayoutGroup)obj).childScaleHeight = true;
((HorizontalOrVerticalLayoutGroup)obj).childControlHeight = false;
Transform obj2 = ((Component)gamepadMenuScreen).transform.Find("Content");
Transform obj3 = ((obj2 is RectTransform) ? obj2 : null);
Transform obj4 = obj3.Find("ControllerProfiles");
RectTransform val = (RectTransform)(object)((obj4 is RectTransform) ? obj4 : null);
((RectTransform)obj3).sizeDelta = val.sizeDelta;
Transform val2 = ((Component)gamepadMenuScreen).transform.Find("Controls");
VerticalLayoutGroup component = ((Component)val2).GetComponent<VerticalLayoutGroup>();
((HorizontalOrVerticalLayoutGroup)component).spacing = ((HorizontalOrVerticalLayoutGroup)component).spacing * 0.75f;
((LayoutGroup)component).childAlignment = (TextAnchor)4;
Transform val3 = val2.Find("RumbleSetting");
GameObject val4 = new GameObject("GamepadSkinSetting");
Extensions.AddComponentIfNotPresent<RectTransform>(val4);
val4.transform.SetParent(val2, false);
val4.transform.SetSiblingIndex(val3.GetSiblingIndex() + 1);
GameObject val5 = Objects.CreateBepinexConfigOptionTranslated("GamepadSkinOption", "Mods.capitalistspz.gamepaduiswitcher-silksong", "SKIN_OPTION.LABEL", "SKIN_OPTION.DESCRIPTION", (GamepadButtonSkinOpt[])Enum.GetValues(typeof(GamepadButtonSkinOpt)), GamepadUISwitcherPlugin.gamepadSkinConfig);
val5.transform.SetParent(val4.transform, false);
Entry val6 = new Entry
{
selectable = (Selectable)(object)val5.GetComponent<MenuSelectable>(),
alsoAffectParent = true,
forceEnable = false,
condition = null
};
MenuButtonList component2 = ((Component)gamepadMenuScreen).GetComponent<MenuButtonList>();
Utils.InsertAfter(existingElem: component2.entries.First((Entry entry) => ((Object)entry.selectable).name == "RumblePopupOption"), arr: ref component2.entries, newElem: val6);
GameObject val7 = new GameObject("GamepadButtonSwapOption");
Extensions.AddComponentIfNotPresent<RectTransform>(val7);
val7.transform.SetParent(val2, false);
val7.transform.SetSiblingIndex(val4.transform.GetSiblingIndex() + 1);
GameObject val8 = Objects.CreateBepinexConfigOptionTranslated("GamepadSwapOption", "Mods.capitalistspz.gamepaduiswitcher-silksong", "SWAP_OPTION.LABEL", "SWAP_OPTION.DESCRIPTION", (GamepadButtonSwapOption[])Enum.GetValues(typeof(GamepadButtonSwapOption)), GamepadUISwitcherPlugin.gamepadButtonSwapConfig);
val8.transform.SetParent(val7.transform, false);
Utils.InsertAfter(newElem: new Entry
{
selectable = (Selectable)(object)val8.GetComponent<MenuSelectable>(),
alsoAffectParent = true,
forceEnable = false
}, arr: ref component2.entries, existingElem: val6);
GamepadUISwitcherPlugin.SetButtonSwapOptions();
}
}
}
[CompilerGenerated]
internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T>
{
int ICollection.Count => _items.Length;
bool ICollection.IsSynchronized => false;
object ICollection.SyncRoot => this;
object IList.this[int index]
{
get
{
return _items[index];
}
set
{
throw new NotSupportedException();
}
}
bool IList.IsFixedSize => true;
bool IList.IsReadOnly => true;
int IReadOnlyCollection<T>.Count => _items.Length;
T IReadOnlyList<T>.this[int index] => _items[index];
int ICollection<T>.Count => _items.Length;
bool ICollection<T>.IsReadOnly => true;
T IList<T>.this[int index]
{
get
{
return _items[index];
}
set
{
throw new NotSupportedException();
}
}
public <>z__ReadOnlyArray(T[] items)
{
_items = items;
}
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable)_items).GetEnumerator();
}
void ICollection.CopyTo(Array array, int index)
{
((ICollection)_items).CopyTo(array, index);
}
int IList.Add(object value)
{
throw new NotSupportedException();
}
void IList.Clear()
{
throw new NotSupportedException();
}
bool IList.Contains(object value)
{
return ((IList)_items).Contains(value);
}
int IList.IndexOf(object value)
{
return ((IList)_items).IndexOf(value);
}
void IList.Insert(int index, object value)
{
throw new NotSupportedException();
}
void IList.Remove(object value)
{
throw new NotSupportedException();
}
void IList.RemoveAt(int index)
{
throw new NotSupportedException();
}
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
return ((IEnumerable<T>)_items).GetEnumerator();
}
void ICollection<T>.Add(T item)
{
throw new NotSupportedException();
}
void ICollection<T>.Clear()
{
throw new NotSupportedException();
}
bool ICollection<T>.Contains(T item)
{
return ((ICollection<T>)_items).Contains(item);
}
void ICollection<T>.CopyTo(T[] array, int arrayIndex)
{
((ICollection<T>)_items).CopyTo(array, arrayIndex);
}
bool ICollection<T>.Remove(T item)
{
throw new NotSupportedException();
}
int IList<T>.IndexOf(T item)
{
return ((IList<T>)_items).IndexOf(item);
}
void IList<T>.Insert(int index, T item)
{
throw new NotSupportedException();
}
void IList<T>.RemoveAt(int index)
{
throw new NotSupportedException();
}
}