Beispiel #1
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);
        }
Beispiel #2
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);
        }
        public static T AddListSetting <T>(RectTransform parent, string name) where T : MonoBehaviour
        {
            var        listSettings      = Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = UnityEngine.Object.Instantiate(listSettings.gameObject, parent);

            newSettingsObject.name = name;

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

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

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

            ListSettingsController volume = newSettingsObject.GetComponent <ListSettingsController>();
            T newListSettingsController   = volume.gameObject.AddComponent <T>();

            UnityEngine.Object.DestroyImmediate(volume);

            foreach (var text in newSettingsObject.GetComponentsInChildren <TMP_Text>())
            {
                Plugin.log.Info($"Text name: {text.name}, Text value: {text.text}");
            }

            TMP_Text nameText = newSettingsObject.GetComponentsInChildren <TMP_Text>().First(x => x.name == "NameText");

            UnityEngine.Object.Destroy(nameText.gameObject.GetComponent <LocalizedTextMeshProUGUI>());
            nameText.text = name;

            return(newListSettingsController);
        }
        public static T AddListSetting <T>(RectTransform parent, string name, Vector2 position) where T : MonoBehaviour
        {
            var        listSettings      = Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = UnityEngine.Object.Instantiate(listSettings.gameObject, parent);

            newSettingsObject.name = name;

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

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

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

            ListSettingsController volume = newSettingsObject.GetComponent <ListSettingsController>();
            T newListSettingsController   = volume.gameObject.AddComponent <T>();

            UnityEngine.Object.DestroyImmediate(volume);
            UnityEngine.Object.DestroyImmediate(newSettingsObject.GetComponentInChildren <LocalizedTextMeshProUGUI>());

            TMP_Text nameText = newSettingsObject.GetComponentsInChildren <TMP_Text>().First(x => x.name == "NameText");

            UnityEngine.Object.Destroy(nameText.gameObject.GetComponent <LocalizedTextMeshProUGUI>());
            nameText.text = name;

            (newListSettingsController.transform as RectTransform).anchorMin        = new Vector2(0.5f, 0.5f);
            (newListSettingsController.transform as RectTransform).anchorMax        = new Vector2(0.5f, 0.5f);
            (newListSettingsController.transform as RectTransform).anchoredPosition = position;
            (newListSettingsController.transform as RectTransform).sizeDelta        = new Vector2(105f, 0f);

            return(newListSettingsController);
        }
        public static T AddListSetting <T>(RectTransform parent, string name) where T : MonoBehaviour
        {
            var        listSettings      = Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = UnityEngine.Object.Instantiate(listSettings.gameObject, parent);

            newSettingsObject.name = name;

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

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

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

            ListSettingsController volume = newSettingsObject.GetComponent <ListSettingsController>();
            T newListSettingsController   = volume.gameObject.AddComponent <T>();

            UnityEngine.Object.DestroyImmediate(volume);

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

            return(newListSettingsController);
        }
Beispiel #6
0
        public T AddStringSetting <T>(string name, string hintText) where T : ListSettingsController
        {
            var        volumeSettings    = GetVolumeSettings();
            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.8f, 0.8f);
            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);

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