Exemple #1
0
        ////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////

        /// <summary>
        /// Prepare slider widget
        /// </summary>
        /// <param name="p_Object">Slider instance</param>
        /// <param name="p_AddControls">Should add left & right controls</param>
        void PrepareSlider(GameObject p_Object, bool p_AddControls = false)
        {
            GameObject.Destroy(p_Object.GetComponentsInChildren <TextMeshProUGUI>().ElementAt(0).transform.gameObject);

            RectTransform l_RectTransform = p_Object.transform.GetChild(1) as RectTransform;

            l_RectTransform.anchorMin = new Vector2(0f, 0f);
            l_RectTransform.anchorMax = new Vector2(1f, 1f);
            l_RectTransform.sizeDelta = new Vector2(1, 1);

            p_Object.GetComponent <LayoutElement>().preferredWidth = -1f;

            if (p_AddControls)
            {
                l_RectTransform           = p_Object.transform.Find("BSMLSlider") as RectTransform;
                l_RectTransform.anchorMin = new Vector2(1.00f, -0.05f);
                l_RectTransform.anchorMax = new Vector2(0.90f, 1.05f);

                FormattedFloatListSettingsValueController l_BaseSettings = MonoBehaviour.Instantiate(Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsValueController>().First(x => (x.name == "VRRenderingScale")), p_Object.transform, false);
                var l_DecButton = l_BaseSettings.transform.GetChild(1).GetComponentsInChildren <Button>().First();
                var l_IncButton = l_BaseSettings.transform.GetChild(1).GetComponentsInChildren <Button>().Last();

                l_DecButton.transform.SetParent(p_Object.transform, false);
                l_IncButton.transform.SetParent(p_Object.transform, false);

                l_DecButton.transform.SetAsFirstSibling();
                l_IncButton.transform.SetAsFirstSibling();

                foreach (Transform l_Child in l_BaseSettings.transform)
                {
                    GameObject.Destroy(l_Child.gameObject);
                }

                GameObject.Destroy(l_BaseSettings);

                SliderSetting l_SliderSetting = p_Object.GetComponent <SliderSetting>();

                l_SliderSetting.slider.valueDidChangeEvent += (_, p_Value) =>
                {
                    l_DecButton.interactable = p_Value > l_SliderSetting.slider.minValue;
                    l_IncButton.interactable = p_Value < l_SliderSetting.slider.maxValue;
                };

                l_DecButton.interactable = l_SliderSetting.slider.value > l_SliderSetting.slider.minValue;
                l_IncButton.interactable = l_SliderSetting.slider.value < l_SliderSetting.slider.maxValue;

                l_DecButton.onClick.RemoveAllListeners();
                l_DecButton.onClick.AddListener(() =>
                {
                    l_SliderSetting.slider.value -= l_SliderSetting.increments;
                    l_SliderSetting.InvokeMethod("OnChange", new object[] { l_SliderSetting.slider, l_SliderSetting.slider.value });
                });
                l_IncButton.onClick.RemoveAllListeners();
                l_IncButton.onClick.AddListener(() =>
                {
                    l_SliderSetting.slider.value += l_SliderSetting.increments;
                    l_SliderSetting.InvokeMethod("OnChange", new object[] { l_SliderSetting.slider, l_SliderSetting.slider.value });
                });
            }
        }
        public override GameObject CreateObject(Transform parent)
        {
            FormattedFloatListSettingsValueController baseSetting = MonoBehaviour.Instantiate(Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsValueController>().First(x => (x.name == "VRRenderingScale")), parent, false);

            baseSetting.name = "BSMLSliderSetting";

            GameObject gameObject = baseSetting.gameObject;

            T sliderSetting = gameObject.AddComponent <T>();

            GameObject.Destroy(gameObject.transform.Find("ValuePicker").gameObject);
            sliderSetting.slider      = GameObject.Instantiate(Resources.FindObjectsOfTypeAll <HMUI.TimeSlider>().First(s => s.name == "RangeValuesTextSlider" && s.transform.parent?.name == "SongStart"), gameObject.transform, false);
            sliderSetting.slider.name = "BSMLSlider";
            sliderSetting.slider.GetComponentInChildren <TextMeshProUGUI>().enableWordWrapping = false;
            (sliderSetting.slider.transform as RectTransform).anchorMin        = new Vector2(1, 0);
            (sliderSetting.slider.transform as RectTransform).anchorMax        = new Vector2(1, 1);
            (sliderSetting.slider.transform as RectTransform).sizeDelta        = new Vector2(40, 0);
            (sliderSetting.slider.transform as RectTransform).pivot            = new Vector2(1, 0.5f);
            (sliderSetting.slider.transform as RectTransform).anchoredPosition = new Vector2(0, 0);

            MonoBehaviour.Destroy(baseSetting);

            TextMeshProUGUI text = gameObject.GetComponentInChildren <TextMeshProUGUI>();

            text.text = "Default Text";
            gameObject.AddComponent <ExternalComponents>().components.Add(text);
            MonoBehaviour.Destroy(text.GetComponent <LocalizedTextMeshProUGUI>(true));

            gameObject.GetComponent <LayoutElement>().preferredWidth = 90;

            gameObject.SetActive(true);
            return(gameObject);
        }
        public override GameObject CreateObject(Transform parent)
        {
            FormattedFloatListSettingsValueController baseSetting = MonoBehaviour.Instantiate(Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsValueController>().First(x => (x.name == "VRRenderingScale")), parent, false);

            baseSetting.name = "BSMLIncDecSetting";

            GameObject gameObject = baseSetting.gameObject;

            MonoBehaviour.Destroy(baseSetting);
            gameObject.SetActive(false);

            T boolSetting = gameObject.AddComponent <T>();

            boolSetting.text          = gameObject.transform.GetChild(1).GetComponentsInChildren <TextMeshProUGUI>().First();
            boolSetting.text.richText = true;
            boolSetting.decButton     = gameObject.transform.GetChild(1).GetComponentsInChildren <Button>().First();
            boolSetting.incButton     = gameObject.transform.GetChild(1).GetComponentsInChildren <Button>().Last();
            (gameObject.transform.GetChild(1) as RectTransform).sizeDelta = new Vector2(40, 0);
            boolSetting.text.overflowMode = TextOverflowModes.Ellipsis;

            TextMeshProUGUI text = gameObject.GetComponentInChildren <TextMeshProUGUI>();

            text.text     = "Default Text";
            text.richText = true;
            gameObject.AddComponent <ExternalComponents>().components.Add(text);
            MonoBehaviour.Destroy(text.GetComponent <LocalizedTextMeshProUGUI>());

            gameObject.GetComponent <LayoutElement>().preferredWidth = 90;

            gameObject.SetActive(true);
            return(gameObject);
        }
Exemple #4
0
        public override GameObject CreateObject(Transform parent)
        {
            FormattedFloatListSettingsValueController baseSetting = MonoBehaviour.Instantiate(Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsValueController>().First(x => (x.name == "VRRenderingScale")), parent, false);

            baseSetting.name = "BSMLColorSetting";

            GameObject gameObject = baseSetting.gameObject;

            gameObject.SetActive(false);

            MonoBehaviour.Destroy(baseSetting);
            ColorSetting colorSetting = gameObject.AddComponent <ColorSetting>();


            Transform valuePick = gameObject.transform.Find("ValuePicker");

            (valuePick.transform as RectTransform).sizeDelta = new Vector2(13, 0);

            Button decButton = valuePick.GetComponentsInChildren <Button>().First();

            decButton.enabled      = false;
            decButton.interactable = true;
            GameObject.Destroy(decButton.transform.Find("Icon").gameObject);
            GameObject.Destroy(valuePick.GetComponentsInChildren <TextMeshProUGUI>().First().gameObject);
            colorSetting.editButton = valuePick.GetComponentsInChildren <Button>().Last();

            TextMeshProUGUI text = gameObject.GetComponentInChildren <TextMeshProUGUI>();

            text.text = "Default Text";
            gameObject.AddComponent <ExternalComponents>().components.Add(text);
            MonoBehaviour.Destroy(text.GetComponent <LocalizedTextMeshProUGUI>());

            gameObject.GetComponent <LayoutElement>().preferredWidth = 90;

            Image colorImage = Object.Instantiate(Resources.FindObjectsOfTypeAll <Image>().First(x => x.gameObject.name == "ColorImage" && x.sprite?.name == "NoteCircle"), valuePick, false);

            colorImage.name = "BSMLCurrentColor";
            (colorImage.gameObject.transform as RectTransform).anchoredPosition = new Vector2(0, 0);
            (colorImage.gameObject.transform as RectTransform).sizeDelta        = new Vector2(5, 5);
            (colorImage.gameObject.transform as RectTransform).anchorMin        = new Vector2(0.2f, 0.5f);
            (colorImage.gameObject.transform as RectTransform).anchorMax        = new Vector2(0.2f, 0.5f);
            colorSetting.colorImage = colorImage;

            Image icon = colorSetting.editButton.transform.Find("Icon").GetComponent <Image>();

            icon.name   = "EditIcon";
            icon.sprite = Utilities.EditIcon;
            icon.rectTransform.sizeDelta         = new Vector2(4, 4);
            colorSetting.editButton.interactable = true;

            (colorSetting.editButton.transform as RectTransform).anchorMin = new Vector2(0, 0);

            colorSetting.modalColorPicker = base.CreateObject(gameObject.transform).GetComponent <ModalColorPicker>();

            gameObject.SetActive(true);
            return(gameObject);
        }
        public override GameObject CreateObject(Transform parent)
        {
            FormattedFloatListSettingsValueController baseSetting = MonoBehaviour.Instantiate(Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsValueController>().First(x => (x.name == "VRRenderingScale")), parent, false);

            baseSetting.name = "BSMLStringSetting";

            GameObject gameObject = baseSetting.gameObject;

            gameObject.SetActive(false);

            MonoBehaviour.Destroy(baseSetting);
            StringSetting stringSetting = gameObject.AddComponent <StringSetting>();
            Transform     valuePick     = gameObject.transform.Find("ValuePicker");

            MonoBehaviour.Destroy(valuePick.GetComponent <StepValuePicker>());
            Button decButton = valuePick.GetComponentsInChildren <Button>().First();

            decButton.enabled      = false;
            decButton.interactable = true;
            GameObject.Destroy(decButton.transform.Find("Icon").gameObject);
            stringSetting.text          = valuePick.GetComponentsInChildren <TextMeshProUGUI>().First();
            stringSetting.text.richText = true;
            stringSetting.editButton    = valuePick.GetComponentsInChildren <Button>().Last();
            stringSetting.boundingBox   = valuePick as RectTransform;

            TextMeshProUGUI text = gameObject.GetComponentInChildren <TextMeshProUGUI>();

            text.text = "Default Text";
            gameObject.AddComponent <ExternalComponents>().components.Add(text);
            MonoBehaviour.Destroy(text.GetComponent <LocalizedTextMeshProUGUI>());

            gameObject.GetComponent <LayoutElement>().preferredWidth = 90;
            stringSetting.text.alignment          = TextAlignmentOptions.MidlineRight;
            stringSetting.text.enableWordWrapping = false;
            RectTransform textTransform = stringSetting.text.transform as RectTransform;

            textTransform.anchorMin        = new Vector2(0, 0);
            textTransform.anchorMax        = new Vector2(1, 1);
            textTransform.anchoredPosition = new Vector2(-6, 0);

            Image icon = stringSetting.editButton.transform.Find("Icon").GetComponent <Image>();

            icon.name   = "EditIcon";
            icon.sprite = Utilities.EditIcon;
            icon.rectTransform.sizeDelta          = new Vector2(4, 4);
            stringSetting.editButton.interactable = true;

            (stringSetting.editButton.transform as RectTransform).anchorMin = new Vector2(0, 0);

            stringSetting.modalKeyboard = base.CreateObject(gameObject.transform).GetComponent <ModalKeyboard>();

            gameObject.SetActive(true);
            return(gameObject);
        }
Exemple #6
0
        internal static ListSetting CreateServerSelectionView(MultiplayerModeSelectionViewController multiplayerView)
        {
            Plugin.Logger.Info("Applying interface for server selection.");
            var parent = multiplayerView.gameObject.transform;
            FormattedFloatListSettingsValueController baseSetting = MonoBehaviour.Instantiate(Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsValueController>().First(x => (x.name == "VRRenderingScale")), parent, false);

            baseSetting.name = "BSMLIncDecSetting";

            GameObject gameObject = baseSetting.gameObject;

            MonoBehaviour.Destroy(baseSetting);
            gameObject.SetActive(false);

            ListSetting serverSelection = gameObject.AddComponent <ListSetting>();

            gameObject.transform.position             += new Vector3(0.0f, 0.15f, 0.0f);
            gameObject.transform.GetChild(1).position += new Vector3(-1.0f, 0.0f, 0.0f);

            serverSelection.text          = gameObject.transform.GetChild(1).GetComponentsInChildren <TextMeshProUGUI>().First();
            serverSelection.text.richText = true;
            serverSelection.decButton     = gameObject.transform.GetChild(1).GetComponentsInChildren <Button>().First();
            serverSelection.incButton     = gameObject.transform.GetChild(1).GetComponentsInChildren <Button>().Last();
            (gameObject.transform.GetChild(1) as RectTransform).sizeDelta = new Vector2(60, 0);
            serverSelection.text.overflowMode = TextOverflowModes.Ellipsis;

            var controller = multiplayerView.gameObject.AddComponent <ServerSelectionController>();

            controller.Init(serverSelection, multiplayerView);

            TextMeshProUGUI text = gameObject.GetComponentInChildren <TextMeshProUGUI>();

            text.transform.position += new Vector3(1.2f, 0.0f, 0.0f);
            text.SetText("Playing on");
            text.richText = true;

            gameObject.GetComponent <LayoutElement>().preferredWidth = 90;
            gameObject.SetActive(true);

            // Initial Update for the SongPacks
            Patches.QuickPlaySongPacksDropdownPatch.UpdateSongPacks();
            return(serverSelection);
        }
        /// <summary>
        /// Setup a toggle setting
        /// </summary>
        /// <param name="p_Setting">Setting to setûp</param>
        /// <param name="p_Action">Action on change</param>
        /// <param name="p_Formatter">Value formatter</param>
        /// <param name="p_Value">New value</param>
        /// <param name="p_RemoveLabel">Should remove label</param>
        /// <param name="p_AddControls">Add Inc/dec buttons</param>
        /// <param name="p_NewRectMin">New rect min</param>
        /// <param name="p_NewRectMax">New rect max</param>
        public static void Setup(BSMLSliderSetting p_Setting,
                                 BSMLAction p_Action,
                                 BSMLAction p_Formatter,
                                 float p_Value,
                                 bool p_RemoveLabel,
                                 bool p_AddControls = false,
                                 UnityEngine.Vector2 p_NewRectMin = default,
                                 UnityEngine.Vector2 p_NewRectMax = default)
        {
            p_Setting.gameObject.SetActive(false);

            if (p_Formatter != null)
            {
                p_Setting.formatter = p_Formatter;
            }

            p_Setting.slider.value = p_Value;

            if (p_Action != null)
            {
                p_Setting.onChange = p_Action;
            }

            p_Setting.updateOnChange = true;

            if (p_RemoveLabel)
            {
                UnityEngine.GameObject.Destroy(p_Setting.gameObject.GetComponentsInChildren <TextMeshProUGUI>().ElementAt(0).transform.gameObject);

                UnityEngine.RectTransform l_RectTransform = p_Setting.gameObject.transform.GetChild(1) as UnityEngine.RectTransform;
                l_RectTransform.anchorMin = UnityEngine.Vector2.zero;
                l_RectTransform.anchorMax = UnityEngine.Vector2.one;
                l_RectTransform.sizeDelta = UnityEngine.Vector2.one;

                p_Setting.gameObject.GetComponent <UnityEngine.UI.LayoutElement>().preferredWidth = -1f;

                if (p_AddControls)
                {
                    l_RectTransform           = p_Setting.gameObject.transform.Find("BSMLSlider") as UnityEngine.RectTransform;
                    l_RectTransform.anchorMin = p_NewRectMin;
                    l_RectTransform.anchorMax = p_NewRectMax;

                    FormattedFloatListSettingsValueController l_BaseSettings = UnityEngine.MonoBehaviour.Instantiate(UnityEngine.Resources.FindObjectsOfTypeAll <FormattedFloatListSettingsValueController>().First(x => (x.name == "VRRenderingScale")), p_Setting.gameObject.transform, false);
                    var l_DecButton = l_BaseSettings.transform.GetChild(1).GetComponentsInChildren <UnityEngine.UI.Button>().First();
                    var l_IncButton = l_BaseSettings.transform.GetChild(1).GetComponentsInChildren <UnityEngine.UI.Button>().Last();

                    l_DecButton.transform.SetParent(p_Setting.gameObject.transform, false);
                    l_DecButton.name = "BSP_DecButton";
                    l_IncButton.transform.SetParent(p_Setting.gameObject.transform, false);
                    l_IncButton.name = "BSP_IncButton";

                    l_IncButton.transform.SetAsFirstSibling();
                    l_DecButton.transform.SetAsFirstSibling();

                    foreach (UnityEngine.Transform l_Child in l_BaseSettings.transform)
                    {
                        UnityEngine.GameObject.Destroy(l_Child.gameObject);
                    }

                    UnityEngine.GameObject.Destroy(l_BaseSettings);

                    p_Setting.slider.valueDidChangeEvent += (_, p_NewValue) =>
                    {
                        l_DecButton.interactable = p_NewValue > p_Setting.slider.minValue;
                        l_IncButton.interactable = p_NewValue < p_Setting.slider.maxValue;
                        p_Setting.ApplyValue();
                        p_Setting.ReceiveValue();
                    };

                    l_DecButton.interactable = p_Setting.slider.value > p_Setting.slider.minValue;
                    l_IncButton.interactable = p_Setting.slider.value < p_Setting.slider.maxValue;

                    l_DecButton.onClick.RemoveAllListeners();
                    l_DecButton.onClick.AddListener(() =>
                    {
                        p_Setting.slider.value  -= p_Setting.increments;
                        l_DecButton.interactable = p_Setting.slider.value > p_Setting.slider.minValue;
                        l_IncButton.interactable = p_Setting.slider.value < p_Setting.slider.maxValue;
                        p_Setting.ApplyValue();
                        p_Setting.ReceiveValue();
                    });
                    l_IncButton.onClick.RemoveAllListeners();
                    l_IncButton.onClick.AddListener(() =>
                    {
                        p_Setting.slider.value  += p_Setting.increments;
                        l_DecButton.interactable = p_Setting.slider.value > p_Setting.slider.minValue;
                        l_IncButton.interactable = p_Setting.slider.value < p_Setting.slider.maxValue;
                        p_Setting.ApplyValue();
                        p_Setting.ReceiveValue();
                    });
                }
            }

            p_Setting.gameObject.SetActive(true);
        }