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