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