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);
        }
Exemple #2
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;
        }
Exemple #3
0
        public T AddListSetting <T>(string name) where T : ListSettingsController
        {
            var        volumeSettings    = Resources.FindObjectsOfTypeAll <VolumeSettingsController>().FirstOrDefault();
            GameObject newSettingsObject = MonoBehaviour.Instantiate(volumeSettings.gameObject, transform);

            newSettingsObject.name = name;

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

            MonoBehaviour.DestroyImmediate(volume);

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

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

            newSettingsObject.name = name;

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

            UnityEngine.Object.DestroyImmediate(volume);

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

            return(newListSettingsController);
        }
Exemple #5
0
        public override void Instantiate()
        {
            var volumeSettings = Resources.FindObjectsOfTypeAll <VolumeSettingsController>().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
            VolumeSettingsController volume = gameObject.GetComponent <VolumeSettingsController>();
            ListViewController       newListSettingsController = (ListViewController)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(ListViewController), gameObject);

            UnityEngine.Object.DestroyImmediate(volume);

            newListSettingsController.applyImmediately = true;
            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;
        }
        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()}");
            }
        }