protected void SetupViewController() { modifiersPanelBlocker.type = Image.Type.Sliced; modifiersPanelBlocker.color = new Color(0f, 0f, 0f, 0.75f); modifiersPanel = Instantiate(Resources.FindObjectsOfTypeAll <GameplayModifiersPanelController>().First(), rectTransform, false); modifiersPanel.gameObject.SetActive(true); modifiersPanel.transform.SetParent(modifiersTab, false); (modifiersPanel.transform as RectTransform).anchorMin = new Vector2(0.5f, 0f); (modifiersPanel.transform as RectTransform).anchorMax = new Vector2(0.5f, 1f); (modifiersPanel.transform as RectTransform).anchoredPosition = new Vector2(0f, -23f); (modifiersPanel.transform as RectTransform).sizeDelta = new Vector2(120f, -23f); HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); foreach (var hint in modifiersPanel.GetComponentsInChildren <HoverHint>()) { hint.SetPrivateField("_hoverHintController", hoverHintController); } modifiersPanel.Awake(); modifiersPanel.SetData(GameplayModifiers.defaultModifiers); modifiersPanel.Refresh(); var modifierToggles = modifiersPanel.GetPrivateField <GameplayModifierToggle[]>("_gameplayModifierToggles"); foreach (var item in modifierToggles) { item.toggle.onValueChanged.AddListener((enabled) => { gameplayModifiersChanged?.Invoke(); }); } playersList.tableView.ReloadData(); }
public void SetupList() { GetVersion(); SetUpUIElements(); var hoverHint = modeSelection.gameObject.AddComponent <HoverHint>(); hoverHint.text = Plugin.Control.GetMode().getDescription(); HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); hoverHint.SetPrivateField("_hoverHintController", hoverHintController); List <ConnectionConfig> Connections = PluginConfig.Instance.GetConnections(); connectionTableData.data.Clear(); foreach (ConnectionConfig Connection in Connections) { Sprite spriteAvail = null; if (Connection.Active) { spriteAvail = Utilities.LoadSpriteFromResources("LovenseBSControl.Resources.Sprites.available_profile.png"); } CustomListTableData.CustomCellInfo customCellInfo = new CustomListTableData.CustomCellInfo(Connection.Name, Connection.Prefix + Connection.IpAdress + ":" + Connection.Port, spriteAvail); connectionTableData.data.Add(customCellInfo); } connectionTableData.tableView.ReloadData(); this.selectedConnection = Connections[this.selectedConnectionNumber]; toggleStatusBtn.text = this.selectedConnection.Active ? "Disable" : "Enable"; connectionTableData.tableView.ScrollToCellWithIdx(this.selectedConnectionNumber, TableView.ScrollPositionType.Beginning, false); connectionTableData.tableView.SelectCellWithIdx(this.selectedConnectionNumber); if (!Plugin.Control.IsToyAvailable()) { return; } List <Toy> Toys = Plugin.Control.GetToyList(); customListTableData.data.Clear(); foreach (Toy toy in Toys) { Sprite sprite = Utilities.LoadSpriteFromResources("LovenseBSControl.Resources.Sprites." + toy.GetPictureName()); ToysConfig toyConfig = toy.GetToyConfig(); CustomListTableData.CustomCellInfo customCellInfo = new CustomListTableData.CustomCellInfo(toy.GetNickName(), toy.GetText() + " - " + ((toy.IsConnected() ? "Connected" : "Disconnected") + (toy.IsConnected()? " - " + toy.getBattery() + "%" : "") + " - " + toyConfig.HType), sprite); customListTableData.data.Add(customCellInfo); } customListTableData.tableView.ReloadData(); this.selectedToy = Toys[this.selectedToyNumber]; customListTableData.tableView.ScrollToCellWithIdx(this.selectedToyNumber, TableView.ScrollPositionType.Beginning, false); customListTableData.tableView.SelectCellWithIdx(this.selectedToyNumber); }
/// <summary> /// Adds hint text to any component that handles pointer events. /// </summary> /// <param name="parent">Thet transform to parent the new HoverHint component to.</param> /// <param name="text">The text to be displayed on the HoverHint panel.</param> /// <returns>The newly created HoverHint component.</returns> public static HoverHint AddHintText(RectTransform parent, string text) { var hoverHint = parent.gameObject.AddComponent <HoverHint>(); hoverHint.text = text; //hoverHint.name = "CustomHintText"; HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); hoverHint.SetPrivateField("_hoverHintController", hoverHintController); return(hoverHint); }
/// <summary> /// Replace existing HoverHint on stat panel icons. /// </summary> /// <param name="button"></param> /// <param name="name"></param> /// <param name="text"></param> public static void SetHoverHint(RectTransform button, string name, string text) { HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); DestroyHoverHint(button); var newHoverHint = button.gameObject.AddComponent <HoverHint>(); newHoverHint.SetPrivateField("_hoverHintController", hoverHintController); newHoverHint.text = text; newHoverHint.name = name; }
public override void Instantiate() { gameObject = UnityEngine.Object.Instantiate(Resources.FindObjectsOfTypeAll <GameplayModifierToggle>().Where(g => g.transform.Find("BG"))?.Last().gameObject, Container); gameObject.name = optionName; gameObject.layer = Container.gameObject.layer; gameObject.transform.SetParent(Container); gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localScale = Vector3.one; gameObject.transform.rotation = Quaternion.identity; gameObject.SetActive(false); // Add a separator for this menu option AddSeparator(Container); // Remove the multiplier text if the toggle has no multiplier if (multiplier == 0) { gameObject.AddComponent <ToggleNameOverride>(); } var currentToggle = gameObject.GetComponent <GameplayModifierToggle>(); if (currentToggle != null) { currentToggle.toggle.isOn = GetValue; currentToggle.toggle.onValueChanged.RemoveAllListeners(); currentToggle.toggle.onValueChanged.AddListener((bool e) => OnToggle?.Invoke(e)); currentToggle.name = optionName; GameplayModifierParamsSO _gameplayModifier = ScriptableObject.CreateInstance <GameplayModifierParamsSO>(); _gameplayModifier.SetPrivateField("_modifierName", optionName); _gameplayModifier.SetPrivateField("_hintText", hintText); _gameplayModifier.SetPrivateField("_multiplier", multiplier); _gameplayModifier.SetPrivateField("_icon", optionIcon == null ? UIUtilities.BlankSprite : optionIcon); currentToggle.SetPrivateField("_gameplayModifier", _gameplayModifier); if (hintText != String.Empty) { HoverHint hoverHint = currentToggle.GetPrivateField <HoverHint>("_hoverHint"); hoverHint.text = hintText; hoverHint.name = optionName; HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); hoverHint.SetPrivateField("_hoverHintController", hoverHintController); } } initialized = true; }
public FoldersViewController(AnnotatedBeatmapLevelCollectionsViewController annotatedBeatmapLevelCollectionsViewController, MainFlowCoordinator mainFlowCoordinator, LevelSelectionNavigationController levelSelectionNavigationController, PopupModalsController popupModalsController, HoverHintController hoverHintController, BeatmapLevelsModel beatmapLevelsModel) { this.annotatedBeatmapLevelCollectionsViewController = annotatedBeatmapLevelCollectionsViewController; this.mainFlowCoordinator = mainFlowCoordinator; this.levelSelectionNavigationController = levelSelectionNavigationController; this.popupModalsController = popupModalsController; this.hoverHintController = hoverHintController; this.beatmapLevelsModel = beatmapLevelsModel; levelPacksIcon = BeatSaberMarkupLanguage.Utilities.FindSpriteInAssembly("PlaylistManager.Icons.LevelPacks.png"); customPacksIcon = BeatSaberMarkupLanguage.Utilities.FindSpriteInAssembly("PlaylistManager.Icons.CustomPacks.png"); playlistsIcon = BeatSaberMarkupLanguage.Utilities.FindSpriteInAssembly("PlaylistManager.Icons.Playlists.png"); foldersIcon = BeatSaberMarkupLanguage.Utilities.FindSpriteInAssembly("PlaylistManager.Icons.Folders.png"); folderMode = FolderMode.None; }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation && activationType == ActivationType.AddedToHierarchy) { _downloadListTableCellInstance = Resources.FindObjectsOfTypeAll <LeaderboardTableCell>().First(); _tabControl = BeatSaberUI.CreateTextSegmentedControl(rectTransform, new Vector2(0f, 31f), new Vector2(100f, 7f), _tabControl_didSelectCellEvent); _tabControl.SetTexts(new string[] { "Players", "Modifiers" }); #region Modifiers tab _modifiersTab = new GameObject("ModifiersTab", typeof(RectTransform)).GetComponent <RectTransform>(); _modifiersTab.SetParent(rectTransform, false); _modifiersTab.anchorMin = new Vector2(0f, 0f); _modifiersTab.anchorMax = new Vector2(1f, 1f); _modifiersTab.anchoredPosition = new Vector2(0f, 0f); _modifiersTab.sizeDelta = new Vector2(0f, 0f); _modifiersPanel = Instantiate(Resources.FindObjectsOfTypeAll <GameplayModifiersPanelController>().First(), rectTransform, false); _modifiersPanel.gameObject.SetActive(true); _modifiersPanel.transform.SetParent(_modifiersTab, false); (_modifiersPanel.transform as RectTransform).anchorMin = new Vector2(0.5f, 0f); (_modifiersPanel.transform as RectTransform).anchorMax = new Vector2(0.5f, 1f); (_modifiersPanel.transform as RectTransform).anchoredPosition = new Vector2(0f, -23f); (_modifiersPanel.transform as RectTransform).sizeDelta = new Vector2(120f, -23f); HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); foreach (var hint in _modifiersPanel.GetComponentsInChildren <HoverHint>()) { hint.SetPrivateField("_hoverHintController", hoverHintController); } _modifiersPanel.Init(GameplayModifiers.defaultModifiers); _modifiersPanel.Awake(); var modifierToggles = _modifiersPanel.GetPrivateField <GameplayModifierToggle[]>("_gameplayModifierToggles"); foreach (var item in modifierToggles) { item.toggle.onValueChanged.AddListener((enabled) => { gameplayModifiersChanged?.Invoke(); }); } _modifiersPanelBlocker = new GameObject("ModifiersPanelBlocker", typeof(RectTransform)).GetComponent <RectTransform>(); //"If it works it's not stupid" _modifiersPanelBlocker.SetParent(_modifiersTab, false); _modifiersPanelBlocker.gameObject.AddComponent <UnityEngine.UI.Image>().color = new Color(0f, 0f, 0f, 0f); _modifiersPanelBlocker.anchorMin = new Vector2(0f, 0f); _modifiersPanelBlocker.anchorMax = new Vector2(1f, 0f); _modifiersPanelBlocker.pivot = new Vector2(0.5f, 0f); _modifiersPanelBlocker.sizeDelta = new Vector2(-10f, 62f); _modifiersPanelBlocker.anchoredPosition = new Vector2(0f, 0f); #endregion #region Players tab _playersTab = new GameObject("PlayersTab", typeof(RectTransform)).GetComponent <RectTransform>(); _playersTab.SetParent(rectTransform, false); _playersTab.anchorMin = new Vector2(0f, 0f); _playersTab.anchorMax = new Vector2(1f, 1f); _playersTab.anchoredPosition = new Vector2(0f, 0f); _playersTab.sizeDelta = new Vector2(0f, 0f); _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageUpButton")), _playersTab, false); (_pageUpButton.transform as RectTransform).anchorMin = new Vector2(0.5f, 1f); (_pageUpButton.transform as RectTransform).anchorMax = new Vector2(0.5f, 1f); (_pageUpButton.transform as RectTransform).anchoredPosition = new Vector2(0f, -18.5f); (_pageUpButton.transform as RectTransform).sizeDelta = new Vector2(40f, 6f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _playersTableView.PageScrollUp(); }); _pageUpButton.interactable = false; _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), _playersTab, false); (_pageDownButton.transform as RectTransform).anchorMin = new Vector2(0.5f, 0f); (_pageDownButton.transform as RectTransform).anchorMax = new Vector2(0.5f, 0f); (_pageDownButton.transform as RectTransform).anchoredPosition = new Vector2(0f, 7f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 6f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _playersTableView.PageScrollDown(); }); _pageDownButton.interactable = false; RectTransform container = new GameObject("Content", typeof(RectTransform)).transform as RectTransform; container.SetParent(_playersTab, false); container.anchorMin = new Vector2(0.15f, 0.5f); container.anchorMax = new Vector2(0.85f, 0.5f); container.sizeDelta = new Vector2(0f, 49f); container.anchoredPosition = new Vector2(0f, -3f); var tableGameObject = new GameObject("CustomTableView"); tableGameObject.SetActive(false); _playersTableView = tableGameObject.AddComponent <TableView>(); _playersTableView.gameObject.AddComponent <RectMask2D>(); _playersTableView.transform.SetParent(container, false); _playersTableView.SetPrivateField("_isInitialized", false); _playersTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); tableGameObject.SetActive(true); (_playersTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (_playersTableView.transform as RectTransform).anchorMax = new Vector2(1f, 1f); (_playersTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 0f); (_playersTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f); ReflectionUtil.SetPrivateField(_playersTableView, "_pageUpButton", _pageUpButton); ReflectionUtil.SetPrivateField(_playersTableView, "_pageDownButton", _pageDownButton); _playersTableView.dataSource = this; #endregion _pingText = this.CreateText("PING: 0", new Vector2(75f, 22.5f)); _pingText.alignment = TextAlignmentOptions.Left; _tabControl_didSelectCellEvent(0); } else { for (int i = 0; i < _tableCells.Count; i++) { Destroy(_tableCells[i].gameObject); } _tableCells.Clear(); _playersList.Clear(); _playersTableView.ReloadData(); } if (activationType == ActivationType.AddedToHierarchy) { SetGameplayModifiers(GameplayModifiers.defaultModifiers); } }
public override void Instantiate() { //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); gameObject = UnityEngine.Object.Instantiate(Resources.FindObjectsOfTypeAll <GameplayModifierToggle>().Where(g => g.transform.Find("BG"))?.Last().gameObject, container); gameObject.name = optionName; gameObject.layer = container.gameObject.layer; gameObject.transform.SetParent(container); gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localScale = Vector3.one; gameObject.transform.rotation = Quaternion.identity; gameObject.SetActive(false); foreach (Transform t in container) { if (t.name.StartsWith("Separator")) { separator = UnityEngine.Object.Instantiate(t.gameObject, container); separator.name = "ExtraSeparator"; separator.SetActive(false); break; } } string ConflictText = "\r\n\r\n<size=60%><color=#ff0000ff><b>Conflicts </b></color>"; var currentToggle = gameObject.GetComponent <GameplayModifierToggle>(); if (currentToggle != null) { currentToggle.toggle.isOn = GetValue; currentToggle.toggle.onValueChanged.RemoveAllListeners(); currentToggle.toggle.onValueChanged.AddListener((bool e) => OnToggle?.Invoke(e)); currentToggle.name = optionName.Replace(" ", ""); GameplayModifierToggle[] gameplayModifierToggles = Resources.FindObjectsOfTypeAll <GameplayModifierToggle>(); if (conflicts.Count > 0) { hintText += ConflictText; foreach (string conflict in conflicts) { var conflictingModifier = gameplayModifierToggles.Where(t => t?.gameplayModifier?.modifierName == conflict).FirstOrDefault(); if (conflictingModifier) { if (!hintText.Contains(ConflictText)) { hintText += ConflictText; } hintText += Char.ConvertFromUtf32((char)0xE069) + conflict + Char.ConvertFromUtf32((char)0xE069); } } } GameplayModifierParamsSO _gameplayModifier = new GameplayModifierParamsSO(); _gameplayModifier.SetPrivateField("_modifierName", optionName); _gameplayModifier.SetPrivateField("_hintText", hintText); _gameplayModifier.SetPrivateField("_multiplier", multiplier); _gameplayModifier.SetPrivateField("_icon", optionIcon == null ? UIUtilities.BlankSprite : optionIcon); currentToggle.SetPrivateField("_gameplayModifier", _gameplayModifier); string currentDisplayName = Char.ConvertFromUtf32((char)0xE069) + optionName + Char.ConvertFromUtf32((char)0xE069); foreach (string conflictingModifierName in conflicts) { GameplayModifierToggle conflictToggle = gameplayModifierToggles.Where(t => t?.gameplayModifier?.modifierName == conflictingModifierName).FirstOrDefault(); if (conflictToggle) { if (!conflictToggle.gameplayModifier.hintText.Contains(ConflictText)) { conflictToggle.gameplayModifier.SetPrivateField("_hintText", conflictToggle.gameplayModifier.hintText + ConflictText); } if (!conflictToggle.gameplayModifier.hintText.Contains(currentDisplayName)) { conflictToggle.gameplayModifier.SetPrivateField("_hintText", conflictToggle.gameplayModifier.hintText + currentDisplayName); } conflictToggle.toggle.onValueChanged.AddListener((e) => { if (e) { currentToggle.toggle.isOn = false; } }); currentToggle.toggle.onValueChanged.AddListener((e) => { if (e) { conflictToggle.toggle.isOn = false; } }); } } if (hintText != String.Empty) { HoverHint hoverHint = currentToggle.GetPrivateField <HoverHint>("_hoverHint"); hoverHint.text = hintText; hoverHint.name = optionName; HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); hoverHint.SetPrivateField("_hoverHintController", hoverHintController); } } initialized = true; }