示例#1
0
        public T AddSliderSetting <T>(string name, string hintText, float min, float max, bool intValues) where T : IncDecSettingsController
        {
            var        volumeSettings    = Resources.FindObjectsOfTypeAll <WindowModeSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;

            WindowModeSettingsController volume = newSettingsObject.GetComponent <WindowModeSettingsController>();
            T newSliderSettingsController       = (T)ReflectionUtil.CopyComponent(volume, typeof(IncDecSettingsController), typeof(T), newSettingsObject);

            MonoBehaviour.DestroyImmediate(volume);

            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("DecButton").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("ValueText").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("IncButton").gameObject);

            HMUI.Scrollbar slider = GameObject.Instantiate(Resources.FindObjectsOfTypeAll <HMUI.Scrollbar>().First(),
                                                           newSettingsObject.transform.Find("Value"), false);
            SliderProperties sliderProperties = slider.gameObject.AddComponent <SliderProperties>();

            sliderProperties.FromValue = min;
            sliderProperties.ToValue   = max;
            sliderProperties.IntValues = intValues;
            slider.GetComponentInChildren <TextMeshProUGUI>().enableWordWrapping = false;
            (slider.transform as RectTransform).sizeDelta = new Vector2(39.5f, 7.5f);
            (slider.transform as RectTransform).anchorMin = new Vector2(0, 0.5f);

            var tmpText = newSettingsObject.GetComponentInChildren <TMP_Text>();

            tmpText.text = name;
            BeatSaberUI.AddHintText(tmpText.rectTransform, hintText);

            return(newSliderSettingsController);
        }
示例#2
0
        public T AddStringSetting <T>(string name, string hintText) where T : ListSettingsController
        {
            var        volumeSettings    = Resources.FindObjectsOfTypeAll <VolumeSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;
            newSettingsObject.transform.Find("Value").gameObject.GetComponent <HorizontalLayoutGroup>().spacing += 2;
            newSettingsObject.transform.Find("Value").Find("DecButton").gameObject.SetActive(false);
            //var bgIcon = newSettingsObject.transform.Find("Value").Find("IncButton").Find("BG").gameObject.GetComponent<Image>();
            //(bgIcon.transform as RectTransform).localScale *= new Vector2(0.9f, 0.9f);
            var arrowIcon = newSettingsObject.transform.Find("Value").Find("IncButton").Find("Arrow").gameObject.GetComponent <Image>();

            arrowIcon.sprite = UIUtilities.EditIcon;
            var valueText = newSettingsObject.transform.Find("Value").Find("ValueText").gameObject.GetComponent <TextMeshProUGUI>();

            valueText.alignment          = TextAlignmentOptions.MidlineRight;
            valueText.enableWordWrapping = false;
            BeatSaberUI.AddHintText(valueText.rectTransform, hintText);

            VolumeSettingsController volume = newSettingsObject.GetComponent <VolumeSettingsController>();
            T newListSettingsController     = (T)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(T), newSettingsObject);

            MonoBehaviour.DestroyImmediate(volume);

            var tmpText = newSettingsObject.GetComponentInChildren <TMP_Text>();

            tmpText.text = name;
            BeatSaberUI.AddHintText(tmpText.rectTransform, hintText);

            return(newListSettingsController);
        }
示例#3
0
        public T AddIconSegmentsSetting <T>(string name, string hintText, IconSegmentedControl.DataItem[] icons) where T : SegmentedControlViewController
        {
            var        volumeSettings    = GetVolumeSettings();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;

            ListSettingsController volume       = newSettingsObject.GetComponent <ListSettingsController>();
            T newTextSegmentsSettingsController = (T)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(T), newSettingsObject);

            MonoBehaviour.DestroyImmediate(volume);

            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("DecButton").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("ValueText").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("IncButton").gameObject);

            IconSegmentedControl segmentedControl = BeatSaberUI.CreateIconSegmentedControl(newSettingsObject.transform.Find("Value") as RectTransform, new Vector2(0f, 0f), new Vector2(40f, 7f));

            newTextSegmentsSettingsController.segmentedControl = segmentedControl;
            segmentedControl.SetData(icons);

            var tmpText = newSettingsObject.GetComponentInChildren <TMP_Text>();

            tmpText.text = name;
            if (hintText != String.Empty)
            {
                BeatSaberUI.AddHintText(tmpText.rectTransform, hintText);
            }

            viewController?.AddSubmenuOption(newSettingsObject);
            AddHooks(newTextSegmentsSettingsController);
            return(newTextSegmentsSettingsController);
        }
示例#4
0
        public T AddListSetting <T>(string name, string hintText) where T : ListSettingsController
        {
            var        volumeSettings    = GetVolumeSettings();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;

            var incBg = newSettingsObject.transform.Find("Value").Find("IncButton").Find("BG").gameObject.GetComponent <Image>();

            (incBg.transform as RectTransform).localScale *= new Vector2(0.8f, 0.8f);
            var decBg = newSettingsObject.transform.Find("Value").Find("DecButton").Find("BG").gameObject.GetComponent <Image>();

            (decBg.transform as RectTransform).localScale *= new Vector2(0.8f, 0.8f);

            ListSettingsController volume = newSettingsObject.GetComponent <ListSettingsController>();
            T newListSettingsController   = (T)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(T), newSettingsObject);

            MonoBehaviour.DestroyImmediate(volume);

            var tmpText = newSettingsObject.GetComponentInChildren <TMP_Text>();

            tmpText.text = name;
            if (hintText != String.Empty)
            {
                BeatSaberUI.AddHintText(tmpText.rectTransform, hintText);
            }

            viewController?.AddSubmenuOption(newSettingsObject);
            AddHooks(newListSettingsController);
            return(newListSettingsController);
        }
示例#5
0
        public override void Instantiate()
        {
            if (initialized)
            {
                return;
            }

            //We have to find our own target
            //TODO: Clean up time complexity issue. This is called for each new option
            SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First();
            GameplaySetupViewController gsvc  = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController");
            RectTransform container           = (RectTransform)gsvc.transform.Find("GameplayModifiers").Find("RightColumn");

            var volumeSettings = Resources.FindObjectsOfTypeAll <VolumeSettingsController>().FirstOrDefault();

            gameObject      = UnityEngine.Object.Instantiate(volumeSettings.gameObject, container);
            gameObject.name = optionName;
            gameObject.GetComponentInChildren <TMP_Text>().text = optionName;

            //Slim down the toggle option so it fits in the space we have before the divider
            (gameObject.transform as RectTransform).sizeDelta = new Vector2(50, (gameObject.transform as RectTransform).sizeDelta.y);

            //This magical nonsense is courtesy of Taz and his SettingsUI class
            VolumeSettingsController volume = gameObject.GetComponent <VolumeSettingsController>();
            ListViewController       newListSettingsController = (ListViewController)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(ListViewController), gameObject);

            UnityEngine.Object.DestroyImmediate(volume);

            newListSettingsController.values   = _options.Keys.ToList();
            newListSettingsController.SetValue = OnChange;
            newListSettingsController.GetValue = () =>
            {
                if (GetValue != null)
                {
                    return(GetValue.Invoke());
                }
                return(_options.Keys.ElementAt(0));
            };
            newListSettingsController.GetTextForValue = (v) =>
            {
                if (_options.ContainsKey(v))
                {
                    return(_options[v]);
                }
                return("UNKNOWN");
            };

            //Initialize the controller, as if we had just opened the settings menu
            newListSettingsController.Init();
            gameObject.SetActive(false);
            initialized = true;
        }
 IEnumerator WaitForInit()
 {
     while (true)
     {
         if (ui.GetPrivateField <bool>("initialized") == true)
         {
             ReflectionUtil.CopyComponent(GameObject.Find("SettingsUI").GetComponent <SettingsUI>(), typeof(SettingsUI), typeof(SettingsUI), uiGO);
             ui = uiGO.GetComponent <SettingsUI>();
             ModifySettings();
             break;
         }
         yield return(new WaitForSeconds(0.1f));
     }
 }
示例#7
0
        public T AddIntSetting <T>(string name) where T : IntSettingsController
        {
            var        volumeSettings    = Resources.FindObjectsOfTypeAll <WindowModeSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;

            WindowModeSettingsController volume = newSettingsObject.GetComponent <WindowModeSettingsController>();
            T newToggleSettingsController       = (T)ReflectionUtil.CopyComponent(volume, typeof(IncDecSettingsController), typeof(T), newSettingsObject);

            MonoBehaviour.DestroyImmediate(volume);

            newSettingsObject.GetComponentInChildren <TMP_Text>().text = name;

            return(newToggleSettingsController);
        }
示例#8
0
        public T AddToggleSetting <T>(string name, string hintText) where T : SwitchSettingsController
        {
            var        volumeSettings    = Resources.FindObjectsOfTypeAll <WindowModeSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;

            WindowModeSettingsController volume = newSettingsObject.GetComponent <WindowModeSettingsController>();
            T newToggleSettingsController       = (T)ReflectionUtil.CopyComponent(volume, typeof(SwitchSettingsController), typeof(T), newSettingsObject);

            MonoBehaviour.DestroyImmediate(volume);

            var tmpText = newSettingsObject.GetComponentInChildren <TMP_Text>();

            tmpText.text = name;
            BeatSaberUI.AddHintText(tmpText.rectTransform, hintText);

            return(newToggleSettingsController);
        }
示例#9
0
        public T AddSliderSetting <T>(string name, string hintText, float min, float max, float increment, bool intValues) where T : IncDecSettingsController
        {
            var        volumeSettings    = GetWindowSettings();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;

            SwitchSettingsController volume = newSettingsObject.GetComponent <SwitchSettingsController>();
            T newSliderSettingsController   = (T)ReflectionUtil.CopyComponent(volume, typeof(IncDecSettingsController), typeof(T), newSettingsObject);

            MonoBehaviour.DestroyImmediate(volume);

            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("DecButton").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("ValueText").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("IncButton").gameObject);

            CustomSlider slider = newSliderSettingsController.gameObject.AddComponent <CustomSlider>();

            slider.Scrollbar      = GameObject.Instantiate(Resources.FindObjectsOfTypeAll <HMUI.Scrollbar>().First(s => s.name != "CustomUISlider"), newSettingsObject.transform.Find("Value"), false);
            slider.Scrollbar.name = "CustomUISlider";
            slider.Scrollbar.GetComponentInChildren <TextMeshProUGUI>().enableWordWrapping = false;
            (slider.Scrollbar.transform as RectTransform).sizeDelta = new Vector2(39.5f, 4.5f);
            (slider.Scrollbar.transform as RectTransform).anchorMin = new Vector2(0, 0.5f);


            slider.Scrollbar.numberOfSteps = (int)((max - min) / increment) + 1;
            slider.MinValue   = min;
            slider.MaxValue   = max;
            slider.IsIntValue = intValues;

            var tmpText = newSettingsObject.GetComponentInChildren <TMP_Text>();

            tmpText.text = name;
            if (hintText != String.Empty)
            {
                BeatSaberUI.AddHintText(tmpText.rectTransform, hintText);
            }

            viewController?.AddSubmenuOption(newSettingsObject);
            AddHooks(newSliderSettingsController);
            return(newSliderSettingsController);
        }
示例#10
0
        public T AddColorPickerSetting <T>(string name, string hintText, Color color, out ColorPickerPreviewClickable clickablePreview) where T : MonoBehaviour
        {
            var        volumeSettings    = Resources.FindObjectsOfTypeAll <SwitchSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;

            SwitchSettingsController volume    = newSettingsObject.GetComponent <SwitchSettingsController>();
            T newColorPickerSettingsController = (T)ReflectionUtil.CopyComponent(volume, typeof(MonoBehaviour), typeof(T), newSettingsObject);

            MonoBehaviour.DestroyImmediate(volume);

            GameObject.Destroy(newSettingsObject.GetComponentInChildren <HorizontalLayoutGroup>());
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("DecButton").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("ValueText").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("IncButton").gameObject);

            ColorPickerPreviewClickable cppc = new GameObject("ColorPickerPreviewClickable").AddComponent <ColorPickerPreviewClickable>();

            cppc.transform.SetParent(newSettingsObject.transform.Find("Value"), false);
            cppc.ImagePreview.color = color;
            (cppc.transform as RectTransform).localScale     = new Vector2(0.06f, 0.06f);
            (cppc.transform as RectTransform).localPosition += new Vector3(3f, 0.1f);
            clickablePreview = cppc;

            var tmpText = newSettingsObject.GetComponentInChildren <TMP_Text>();

            tmpText.text = name;
            if (hintText != String.Empty)
            {
                BeatSaberUI.AddHintText(tmpText.rectTransform, hintText);
            }

            viewController?.AddSubmenuOption(newSettingsObject);
            AddHooks(newColorPickerSettingsController);
            return(newColorPickerSettingsController);
        }
示例#11
0
        public T AddColorPickerSetting <T>(string name, string hintText) where T : SimpleSettingsController
        {
            var        volumeSettings    = Resources.FindObjectsOfTypeAll <WindowModeSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;

            WindowModeSettingsController volume = newSettingsObject.GetComponent <WindowModeSettingsController>();
            T newColorPickerSettingsController  = (T)ReflectionUtil.CopyComponent(volume, typeof(SimpleSettingsController), typeof(T), newSettingsObject);

            MonoBehaviour.DestroyImmediate(volume);

            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("DecButton").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("ValueText").gameObject);
            GameObject.Destroy(newSettingsObject.transform.Find("Value").Find("IncButton").gameObject);

            ColorPickerPreviewClickable cppc = new GameObject("ColorPickerPreviewClickable").AddComponent <ColorPickerPreviewClickable>();

            cppc.ImagePreview.sprite = null;

            //cppc.transform.localScale = new Vector3(sizeDelta.x, sizeDelta.y, colorPicker.transform.localScale.z);
            cppc.transform.SetParent(newSettingsObject.transform.Find("Value"), false);

            //cppc.transform.localScale = new Vector3(0.2f, 0.15f);
            //(cppc.transform as RectTransform).anchorMin = new Vector2(0, 0.5f);
            //(cppc.transform as RectTransform).anchorMax = new Vector2(0, 0.5f);
            //(cppc.transform as RectTransform).anchoredPosition = new Vector2(-50, 0);
            (cppc.transform as RectTransform).sizeDelta = new Vector2(39.5f, 7f);

            var tmpText = newSettingsObject.GetComponentInChildren <TMP_Text>();

            tmpText.text = name;
            BeatSaberUI.AddHintText(tmpText.rectTransform, hintText);

            return(newColorPickerSettingsController);
        }
        public override void Instantiate()
        {
            var volumeSettings = Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsController>().FirstOrDefault();

            gameObject      = UnityEngine.Object.Instantiate(volumeSettings.gameObject, Container);
            gameObject.name = optionName;
            gameObject.GetComponentInChildren <TMP_Text>().text = optionName;

            // Add a separator for this menu option
            AddSeparator(Container);

            //This magical nonsense is courtesy of Taz and his SettingsUI class
            ListSettingsController volume = gameObject.GetComponent <ListSettingsController>();

            multiSelectController = (ListViewController)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(ListViewController), gameObject);
            UnityEngine.Object.DestroyImmediate(volume);

            multiSelectController.applyImmediately = true;
            multiSelectController.values           = _options.Keys.ToList();
            multiSelectController.SetValue         = OnChange;
            multiSelectController.GetValue         = () =>
            {
                if (GetValue != null)
                {
                    return(GetValue.Invoke());
                }
                return(_options.Keys.ElementAt(0));
            };
            multiSelectController.GetTextForValue = (v) =>
            {
                if (_options.ContainsKey(v))
                {
                    return(_options[v] != null ? _options[v] : v.ToString());
                }
                return("UNKNOWN");
            };
            //Initialize the controller, as if we had just opened the settings menu
            multiSelectController.Init();
            var      value           = multiSelectController.gameObject.transform.Find("Value");
            var      valueText       = value.Find("ValueText");
            TMP_Text valueTextObject = valueText.GetComponent <TMP_Text>();

            valueTextObject.lineSpacing = -50;
            valueTextObject.alignment   = TextAlignmentOptions.CenterGeoAligned;

            var nameText = multiSelectController.gameObject.transform.Find("NameText");

            nameText.localScale = new Vector3(0.85f, 0.85f, 0.85f);
            value.localScale    = new Vector3(0.7f, 0.7f, 0.7f);
            if (hintText != String.Empty)
            {
                BeatSaberUI.AddHintText(nameText as RectTransform, hintText);
            }

            var dec = value.Find("DecButton");

            dec.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
            var inc = value.Find("IncButton");

            inc.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
            value.localPosition     -= new Vector3(8, 0.3f);

            gameObject.SetActive(false);
            initialized = true;
        }
示例#13
0
        private void AddMultiSelectOption(string optionName, Dictionary <float, string> options, Transform parent, GameObject destinationObject, Action <float> onSet = null, Vector2?position = null)
        {
            if (position == null)
            {
                position = Vector2.zero;
            }

            destinationObject.SetActive(false);

            FormattedFloatListSettingsController formattedFloatListSettingsController = Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsController>().FirstOrDefault <FormattedFloatListSettingsController>();
            var multiSelectGameObject = Instantiate(formattedFloatListSettingsController.gameObject, parent);

            multiSelectGameObject.name = optionName;
            multiSelectGameObject.GetComponentInChildren <TMP_Text>().text = optionName;
            var oldListSettingsController = multiSelectGameObject.GetComponent <ListSettingsController>();
            var newListViewController     = (ListViewController)ReflectionUtil.CopyComponent(oldListSettingsController, typeof(ListSettingsController), typeof(ListViewController), multiSelectGameObject);

            DestroyImmediate(oldListSettingsController);

            newListViewController.applyImmediately = true;
            newListViewController.values           = options.Keys.ToList();
            newListViewController.SetValue         = onSet;
            newListViewController.GetValue         = () => options.Keys.ElementAt(0);
            newListViewController.GetTextForValue  = (float v) =>
            {
                if (!options.ContainsKey(v))
                {
                    return("UNKNOWN");
                }
                if (options[v] == null)
                {
                    return(v.ToString());
                }
                return(options[v]);
            };

            Polyglot.LocalizedTextMeshProUGUI localizer = newListViewController.GetComponentInChildren <Polyglot.LocalizedTextMeshProUGUI>();
            if (localizer != null)
            {
                Destroy(localizer);
            }

            var valueTextTransform = newListViewController.gameObject.transform.Find("Value");
            var valueTextComponent = valueTextTransform.Find("ValueText").GetComponent <TMP_Text>();

            valueTextComponent.lineSpacing = -50f;
            valueTextComponent.alignment   = TextAlignmentOptions.CenterGeoAligned;

            var nameTextTransform = newListViewController.gameObject.transform.Find("NameText");

            nameTextTransform.localScale     = new Vector3(0.85f, 0.85f, 0.85f);
            nameTextTransform.localPosition += new Vector3(2f, 5f);
            (nameTextTransform as RectTransform).sizeDelta = new Vector2(47f, 8f);
            valueTextTransform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
            valueTextTransform.Find("DecButton").transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
            valueTextTransform.Find("IncButton").transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
            newListViewController.transform.localPosition             = (Vector2)position;
            newListViewController.Init();

            destinationObject.SetActive(true);
        }
        public override void Instantiate()
        {
            try
            {
                //We have to find our own target
                //TODO: Clean up time complexity issue. This is called for each new option
                SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First();
                GameplaySetupViewController gsvc  = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController");
                RectTransform container           = (RectTransform)gsvc.transform.Find(pageName).Find(panelName);

                var volumeSettings = Resources.FindObjectsOfTypeAll <VolumeSettingsController>().FirstOrDefault();
                gameObject      = UnityEngine.Object.Instantiate(volumeSettings.gameObject, container);
                gameObject.name = optionName;
                gameObject.GetComponentInChildren <TMP_Text>().text = optionName;

                foreach (Transform t in container)
                {
                    if (t.name.StartsWith("Separator"))
                    {
                        separator      = UnityEngine.Object.Instantiate(t.gameObject, container);
                        separator.name = "ExtraSeparator";
                        separator.SetActive(false);
                        break;
                    }
                }

                //Slim down the toggle option so it fits in the space we have before the divider
                (gameObject.transform as RectTransform).sizeDelta = new Vector2(50, (gameObject.transform as RectTransform).sizeDelta.y);

                //This magical nonsense is courtesy of Taz and his SettingsUI class
                VolumeSettingsController volume = gameObject.GetComponent <VolumeSettingsController>();
                ListViewController       newListSettingsController = (ListViewController)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(ListViewController), gameObject);
                UnityEngine.Object.DestroyImmediate(volume);

                newListSettingsController.values   = _options.Keys.ToList();
                newListSettingsController.SetValue = OnChange;
                newListSettingsController.GetValue = () =>
                {
                    if (GetValue != null)
                    {
                        return(GetValue.Invoke());
                    }
                    return(_options.Keys.ElementAt(0));
                };
                newListSettingsController.GetTextForValue = (v) =>
                {
                    if (_options.ContainsKey(v))
                    {
                        return(_options[v] != null ? _options[v] : v.ToString());
                    }
                    return("UNKNOWN");
                };

                //Initialize the controller, as if we had just opened the settings menu
                newListSettingsController.Init();
                var      value           = newListSettingsController.gameObject.transform.Find("Value");
                var      valueText       = value.Find("ValueText");
                TMP_Text valueTextObject = valueText.GetComponent <TMP_Text>();
                valueTextObject.lineSpacing = -50;
                valueTextObject.alignment   = TextAlignmentOptions.CenterGeoAligned;

                var nameText = newListSettingsController.gameObject.transform.Find("NameText");
                nameText.localScale = new Vector3(0.85f, 0.85f, 0.85f);
                value.localScale    = new Vector3(0.7f, 0.7f, 0.7f);
                if (hintText != String.Empty)
                {
                    BeatSaberUI.AddHintText(nameText as RectTransform, hintText);
                }

                var dec = value.Find("DecButton");
                dec.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
                var inc = value.Find("IncButton");
                inc.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
                value.localPosition     -= new Vector3(8, 0.3f);

                gameObject.SetActive(false);
                initialized = true;
            }
            catch (Exception e)
            {
                Console.WriteLine($"Exception when trying to instantiate list option {e.ToString()}");
            }
        }