public override void __Activate(ActivationType activationType) { base.__Activate(activationType); // if (!initialized && activationType == ActivationType.AddedToHierarchy) { (_pageUpButton.transform as RectTransform).anchoredPosition = new Vector2(0, 26); _pageUpButton.onClick.AddListener(delegate() { pageUpPressed?.Invoke(); }); _pageDownButton.onClick.AddListener(delegate() { pageDownPressed?.Invoke(); }); _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); (_loadingIndicator.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(0f, 0f); _loadingIndicator.SetActive(true); CreateButtons(); initialized = true; _customListTableView.didSelectCellWithIdxEvent += DidSelectRowEvent; } else { _customListTableView.ReloadData(); } }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation && activationType == ActivationType.AddedToHierarchy) { title = "More Playlists"; _playlistsNavigationController = BeatSaberUI.CreateViewController <BackButtonNavigationController>(); _playlistsNavigationController.didFinishEvent += _morePlaylistsNavigationController_didFinishEvent; _playlistsListViewController = BeatSaberUI.CreateViewController <PlaylistListViewController>(); _playlistsListViewController.didSelectRow += _morePlaylistsListViewController_didSelectRow; _playlistsListViewController.highlightDownloadedPlaylists = true; GameObject _songDetailGameObject = Instantiate(Resources.FindObjectsOfTypeAll <StandardLevelDetailViewController>().First(), _playlistsNavigationController.rectTransform, false).gameObject; Destroy(_songDetailGameObject.GetComponent <StandardLevelDetailViewController>()); _playlistDetailViewController = _songDetailGameObject.AddComponent <PlaylistDetailViewController>(); _playlistDetailViewController.selectButtonPressed += _playlistDetailViewController_selectButtonPressed; _playlistDetailViewController.SetSelectButtonText("Add"); _playlistDetailViewController.addDownloadButton = false; _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(_playlistsNavigationController.transform); } SetViewControllersToNavigationConctroller(_playlistsNavigationController, new VRUIViewController[] { _playlistsListViewController }); ProvideInitialViewControllers(_playlistsNavigationController, null, null); StartCoroutine(GetPlaylists()); }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { if (activationType == ActivationType.AddedToHierarchy) { _backButton = BeatSaberUI.CreateBackButton(rectTransform); _backButton.onClick.AddListener(delegate() { didFinishEvent?.Invoke(); }); _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); } } }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { BeatSaberUI.CreateBackButton(this.rectTransform, () => BackButtonPressed?.Invoke()); _loadingSpinner = BeatSaberUI.CreateLoadingSpinner(this.rectTransform); var headerRectTransform = Instantiate(Resources.FindObjectsOfTypeAll <RectTransform>() .First(x => x.name == "HeaderPanel" && x.parent.name == "PlayerSettingsViewController"), this.rectTransform); _header = headerRectTransform.gameObject; _resultsText = BeatSaberUI.CreateText(this.rectTransform, _placeholderResultsText, Vector2.zero, Vector2.zero); _resultsText.alignment = TextAlignmentOptions.Center; _resultsText.enableWordWrapping = true; _forceButton = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", new Vector2(59f, -32f), new Vector2(36f, 10f), () => ForceShowButtonPressed?.Invoke(), "Force Show Results"); _lastSearchButton = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", new Vector2(59f, -32f), new Vector2(36f, 10f), () => LastSearchButtonPressed?.Invoke(), "<color=#FFFFCC>Redo Last Search</color>"); (_lastSearchButton as HMUI.NoTransitionsButton).selectionStateDidChangeEvent += delegate(HMUI.NoTransitionsButton.SelectionState selectionState) { var text = _lastSearchButton.GetComponentInChildren <TextMeshProUGUI>(); if (selectionState == HMUI.NoTransitionsButton.SelectionState.Highlighted) { text.text = "<color=#444400>Redo Last Search</color>"; } else { text.text = "<color=#FFFFCC>Redo Last Search</color>"; } }; _lastSearchText = BeatSaberUI.CreateText(this.rectTransform, "", new Vector2(23f, -31.5f), new Vector2(30f, 8f)); _lastSearchText.fontSize = 3.5f; _lastSearchText.color = new Color(1f, 1f, 1f, 0.3f); _lastSearchText.alignment = TextAlignmentOptions.TopRight; _songPreviewPlayer = Instantiate(Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First()); } else { _resultsText.text = _placeholderResultsText; _resultsText.fontSize = 6f; } AdjustElements(); _loadingSpinner.SetActive(false); _resultsText.gameObject.SetActive(!PluginConfig.CompactSearchMode); _forceButton.gameObject.SetActive(false); _lastSearchButton.gameObject.SetActive(false); _lastSearchText.gameObject.SetActive(false); SetHeaderActive(!PluginConfig.CompactSearchMode); }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { _prevChannelButton = BeatSaberUI.CreateUIButton(rectTransform, "QuitButton", new Vector2(-55f, 34f), () => { prevPressedEvent?.Invoke(); }, "<<"); _nextChannelButton = BeatSaberUI.CreateUIButton(rectTransform, "QuitButton", new Vector2(65f, 34f), () => { nextPressedEvent?.Invoke(); }, ">>"); _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(4.5f, 4.5f); _container = new GameObject("Container", typeof(RectTransform)); _container.transform.SetParent(rectTransform, false); _joinButton = BeatSaberUI.CreateUIButton(rectTransform, "QuitButton", new Vector2(4.5f, -30f), () => { joinPressedEvent?.Invoke(currentChannel); }, "Join"); _joinButton.ToggleWordWrapping(false); _joinButton.transform.SetParent(_container.transform, true); _channelCover = new GameObject("CustomUIImage").AddComponent <Image>(); _channelCover.material = Sprites.NoGlowMat; _channelCover.rectTransform.SetParent(rectTransform, false); _channelCover.rectTransform.anchorMin = new Vector2(0.5f, 0.5f); _channelCover.rectTransform.anchorMax = new Vector2(0.5f, 0.5f); _channelCover.rectTransform.anchoredPosition = new Vector2(4.5f, 4.5f); _channelCover.rectTransform.sizeDelta = new Vector2(32f, 32f); _channelCover.sprite = UIUtilities.BlankSprite; _channelCover.rectTransform.SetParent(_container.transform, true); _channelNameText = BeatSaberUI.CreateText(rectTransform, "CHANNEL NAME", new Vector2(4.5f, 35.50f)); _channelNameText.alignment = TextAlignmentOptions.Top; _channelNameText.overflowMode = TextOverflowModes.Overflow; _channelNameText.lineSpacing = -46f; _channelNameText.fontSize = 10; _channelNameText.transform.SetParent(_container.transform, true); _playerCountText = BeatSaberUI.CreateText(rectTransform, "Players: 0", new Vector2(4.5f, -15f)); _playerCountText.alignment = TextAlignmentOptions.Center; _playerCountText.transform.SetParent(_container.transform, true); _nowPlayingText = BeatSaberUI.CreateText(rectTransform, "Now playing: UNKNOWN", new Vector2(4.5f, -21f)); _nowPlayingText.alignment = TextAlignmentOptions.Center; _nowPlayingText.transform.SetParent(_container.transform, true); } _container.SetActive(false); }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { if (activationType == ActivationType.AddedToHierarchy) { _backButton = BeatSaberUI.CreateBackButton(rectTransform); _backButton.onClick.AddListener(delegate() { if (!_isInTransition && !_parentViewController.GetPrivateField <bool>("_isInTransition")) { didFinishEvent?.Invoke(); } }); _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); _loadingIndicator.SetActive(false); } } }
protected override void DidActivate(bool firstActivation, ActivationType type) { base.DidActivate(firstActivation, type); if (firstActivation && type == ActivationType.AddedToHierarchy) { _backButton = BeatSaberUI.CreateBackButton(rectTransform as RectTransform, delegate() { backButtonPressed?.Invoke(); }); RectTransform container = new GameObject("VideoListContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.sizeDelta = new Vector2(105f, 0f); _searchButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(60, -20), new Vector2(30, 8), () => { searchButtonPressed?.Invoke(); }, "Refine"); _downloadButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(60, -30), new Vector2(30, 8), () => { downloadButtonPressed?.Invoke(resultsList[_lastSelectedRow]); }, "Download"); // _downloadButton.GetComponentInChildren<HorizontalLayoutGroup>().padding = new RectOffset(0, 0, 0, 0); _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); (_loadingIndicator.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(0f, 0f); _loadingIndicator.SetActive(true); _customListTableView.didSelectCellWithIdxEvent -= DidSelectRowEvent; _customListTableView.didSelectCellWithIdxEvent += _songsTableView_DidSelectRowEvent; (_customListTableView.transform.parent as RectTransform).sizeDelta = new Vector2(105, 0); (_customListTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0.5f); (_customListTableView.transform as RectTransform).anchorMax = new Vector2(1f, 0.5f); (_customListTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_customListTableView.transform as RectTransform).anchoredPosition = new Vector3(-10f, 0f); } else { _customListTableView.ReloadData(); } _downloadButton.interactable = false; }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation && activationType == ActivationType.AddedToHierarchy) { title = "More Playlists"; _playlistsListViewController = BeatSaberUI.CreateViewController <PlaylistListViewController>(); _playlistsListViewController.didSelectRow += _morePlaylistsListViewController_didSelectRow; _playlistsListViewController.highlightDownloadedPlaylists = true; _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(_playlistsNavigationController.transform); } SetViewControllersToNavigationConctroller(_playlistsNavigationController, new VRUIViewController[] { _playlistsListViewController }); ProvideInitialViewControllers(_playlistsNavigationController, null, null); StartCoroutine(GetPlaylists()); }
public override void __Activate(ActivationType activationType) { base.__Activate(activationType); if (activationType == ActivationType.AddedToHierarchy) { _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); (_loadingIndicator.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(0f, 0f); _loadingIndicator.SetActive(true); RectTransform viewControllersContainer = FindObjectsOfType <RectTransform>().First(x => x.name == "ViewControllers"); var headerPanelRectTransform = Instantiate(viewControllersContainer.GetComponentsInChildren <RectTransform>(true).First(x => x.name == "HeaderPanel" && x.parent.name == "PlayerSettingsViewController"), rectTransform); headerPanelRectTransform.name = "BeatBoards: Header"; headerPanelRectTransform.gameObject.SetActive(true); _titleText = headerPanelRectTransform.GetComponentInChildren <TextMeshProUGUI>(); _titleText.text = ""; GET.Instance.GetUserFromPlatformID(this); CreateText(); } }
protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation && type == ActivationType.AddedToHierarchy) { rectTransform.anchorMin = new Vector2(0.5f, 0f); rectTransform.anchorMax = new Vector2(0.5f, 1f); rectTransform.sizeDelta = new Vector2(74f, 0f); rectTransform.pivot = new Vector2(0.4f, 0.5f); _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageUpButton")), rectTransform, 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, -14f); (_pageUpButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { pageUpPressed?.Invoke(); }); _pageUpButton.interactable = false; _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), rectTransform, 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, 8f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { pageDownPressed?.Invoke(); }); _sortByButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(15f, 36.25f), new Vector2(30f, 6f), () => { SelectTopButtons(TopButtonsState.SortBy); }, "Sort by"); _sortByButton.SetButtonTextSize(3f); _topButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(-20f, 36.25f), new Vector2(20f, 6f), () => { sortByTop?.Invoke(); SelectTopButtons(TopButtonsState.Select); }, "Downloads"); _topButton.SetButtonTextSize(3f); _topButton.ToggleWordWrapping(false); _topButton.gameObject.SetActive(false); _newButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(0f, 36.25f), new Vector2(20f, 6f), () => { sortByNew?.Invoke(); SelectTopButtons(TopButtonsState.Select); }, "Newest"); _newButton.SetButtonTextSize(3f); _newButton.ToggleWordWrapping(false); _newButton.gameObject.SetActive(false); _starButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(20f, 36.25f), new Vector2(20f, 6f), () => { sortByPlays?.Invoke(); SelectTopButtons(TopButtonsState.Select); }, "Plays"); _starButton.SetButtonTextSize(3f); _starButton.ToggleWordWrapping(false); _starButton.gameObject.SetActive(false); _searchButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(-15, 36.25f), new Vector2(30f, 6f), () => { searchButtonPressed?.Invoke(); SelectTopButtons(TopButtonsState.Search); }, "Search"); _searchButton.SetButtonTextSize(3f); _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); (_loadingIndicator.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(0f, 0f); _loadingIndicator.SetActive(true); _songListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); RectTransform container = new GameObject("CustomListContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.sizeDelta = new Vector2(60f, 0f); _songsTableView = new GameObject("CustomTableView", typeof(RectTransform)).AddComponent <TableView>(); _songsTableView.gameObject.AddComponent <RectMask2D>(); _songsTableView.transform.SetParent(container, false); _songsTableView.SetPrivateField("_isInitialized", false); _songsTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); _songsTableView.Init(); (_songsTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (_songsTableView.transform as RectTransform).anchorMax = new Vector2(1f, 1f); (_songsTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_songsTableView.transform as RectTransform).anchoredPosition = new Vector2(0f, -3f); _songsTableView.dataSource = this; _songsTableView.didSelectCellWithIdxEvent += _songsTableView_DidSelectRowEvent; } else { _songsTableView.ReloadData(); } }
//Time - Downloads //BPM - Plays //Notes - BPM //Obstacles - Upvotes //Bombs - Downvotes protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation) { gameObject.SetActive(true); _levelDetails = GetComponentsInChildren <StandardLevelDetailView>(true).First(x => x.name == "LevelDetail"); _levelDetails.gameObject.SetActive(true); (_levelDetails.transform as RectTransform).anchoredPosition = new Vector2(-40, 0); BeatmapDifficultySegmentedControlController beatmapDifficultySegmentedControl = GetComponentsInChildren <BeatmapDifficultySegmentedControlController>(true).First(x => x.name == "BeatmapDifficultySegmentedControl"); beatmapDifficultySegmentedControl.gameObject.SetActive(false); BeatmapCharacteristicSegmentedControlController beatmapCharacteristicSegmentedControl = GetComponentsInChildren <BeatmapCharacteristicSegmentedControlController>(true).First(x => x.name == "BeatmapCharacteristicSegmentedControl"); beatmapCharacteristicSegmentedControl.gameObject.SetActive(false); RemoveCustomUIElements(rectTransform); _levelParams = GetComponentsInChildren <LevelParamsPanel>().First(x => x.name == "LevelParamsPanel"); foreach (HoverHint hint in _levelParams.transform.GetComponentsInChildren <HoverHint>()) { switch (hint.name) { case "Time": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Sprites.DownloadIcon; }; break; case "BPM": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Sprites.PlayIcon; }; break; case "NotesCount": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Resources.FindObjectsOfTypeAll <Sprite>().First(x => x.name == "MetronomeIcon"); }; break; case "ObstaclesCount": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Sprites.ThumbUp; }; break; case "BombsCount": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Sprites.ThumbDown; }; break; } Destroy(hint); } RectTransform yourStats = GetComponentsInChildren <RectTransform>().First(x => x.name == "Stats"); yourStats.gameObject.SetActive(true); TextMeshProUGUI[] _textComponents = GetComponentsInChildren <TextMeshProUGUI>(); try { songNameText = _textComponents.First(x => x.name == "SongNameText"); downloadsText = _textComponents.First(x => x.name == "ValueText" && x.transform.parent.name == "Time"); downloadsText.fontSize = 3f; playsText = _textComponents.First(x => x.name == "ValueText" && x.transform.parent.name == "BPM"); playsText.fontSize = 3f; // foreach (var x in _textComponents) // { // Console.WriteLine(x.name); // Console.WriteLine(x.transform.parent.name); // } difficulty1Title = _textComponents.First(x => x.name == "Title" && x.transform.parent.name == "MaxRank"); //.text = "Expert/+"; difficulty1Text = _textComponents.First(x => x.name == "Value" && x.transform.parent.name == "MaxRank"); difficulty2Title = _textComponents.First(x => x.name == "Title" && x.transform.parent.name == "Highscore");//.text = "Hard"; difficulty2Text = _textComponents.First(x => x.name == "Value" && x.transform.parent.name == "Highscore"); difficulty3Title = _textComponents.First(x => x.name == "Title" && x.transform.parent.name == "MaxCombo");//.text = "Easy/Normal"; difficulty3Text = _textComponents.First(x => x.name == "Value" && x.transform.parent.name == "MaxCombo"); } catch (Exception e) { Plugin.log.Critical("Unable to convert detail view controller! Exception: " + e); } _downloadButton = _levelDetails.playButton; _downloadButton.SetButtonText("DOWNLOAD"); _downloadButton.ToggleWordWrapping(false); _downloadButton.onClick.RemoveAllListeners(); _downloadButton.onClick.AddListener(() => { downloadButtonPressed?.Invoke(_currentSong); }); (_downloadButton.transform as RectTransform).sizeDelta = new Vector2(26f, 8.8f); _favoriteButton = _levelDetails.practiceButton; _favoriteButton.SetButtonIcon(Sprites.AddToFavorites); _favoriteButton.onClick.RemoveAllListeners(); _favoriteButton.onClick.AddListener(() => { favoriteButtonPressed?.Invoke(_currentSong); }); coverImage = _levelDetails.GetPrivateField <RawImage>("_coverImage"); _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); (_loadingIndicator.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(0f, 0f); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(-40f, 0f); } }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { // the rect transform initially is not the size of the entire window, so set that manually RectTransform rt = this.rectTransform; rt.sizeDelta = new Vector2(160f, 80f); _backButton = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", HandleBackButtonPressed, "Back"); _backButton.ToggleWordWrapping(false); _backButton.SetButtonTextSize(4f); rt = _backButton.transform as RectTransform; rt.anchorMax = Vector2.zero; rt.anchorMin = Vector2.zero; rt.pivot = Vector2.zero; rt.sizeDelta = new Vector2(20f, 7.5f); rt.anchoredPosition = new Vector2(5f, 2f); _clearButton = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", HandleClearButtonPressed, "Clear All"); _clearButton.ToggleWordWrapping(false); _clearButton.SetButtonTextSize(3f); rt = _clearButton.transform as RectTransform; rt.anchorMax = new Vector2(1f, 0f); rt.anchorMin = new Vector2(1f, 0f); rt.pivot = new Vector2(1f, 0f); rt.sizeDelta = new Vector2(24f, 6.5f); rt.anchoredPosition = new Vector2(-60f, 2f); BeatSaberUI.AddHintText(rt, "Puts all settings back to the default"); _resetButton = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", HandleResetButtonPressed, "Reset"); _resetButton.ToggleWordWrapping(false); _resetButton.SetButtonTextSize(3f); rt = _resetButton.transform as RectTransform; rt.anchorMax = new Vector2(1f, 0f); rt.anchorMin = new Vector2(1f, 0f); rt.pivot = new Vector2(1f, 0f); rt.sizeDelta = new Vector2(20f, 6.5f); rt.anchoredPosition = new Vector2(-35f, 2f); BeatSaberUI.AddHintText(rt, "Revert to previously applied settings"); _applyButton = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", HandleApplyButtonPressed, "Apply"); _applyButton.ToggleWordWrapping(false); _applyButton.SetButtonTextSize(4f); rt = _applyButton.transform as RectTransform; rt.anchorMax = new Vector2(1f, 0f); rt.anchorMin = new Vector2(1f, 0f); rt.pivot = new Vector2(1f, 0f); rt.sizeDelta = new Vector2(20f, 7.5f); rt.anchoredPosition = new Vector2(-5f, 2f); BeatSaberUI.AddHintText(rt, "Applies the current settings to the filter"); _unapplyButton = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", HandleUnapplyButtonPressed, "Unapply"); _unapplyButton.ToggleWordWrapping(false); _unapplyButton.SetButtonTextSize(4f); rt = _unapplyButton.transform as RectTransform; rt.anchorMax = new Vector2(1f, 0f); rt.anchorMin = new Vector2(1f, 0f); rt.pivot = new Vector2(1f, 0f); rt.sizeDelta = new Vector2(20f, 7.5f); rt.anchoredPosition = new Vector2(-5f, 2f); BeatSaberUI.AddHintText(rt, "Unapplies the filter (Keeps all settings as-is for re-application)"); _unapplyButton.gameObject.SetActive(false); _colorHint = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", null, "?"); _colorHint.GetComponentsInChildren <HorizontalLayoutGroup>().First(x => x.name == "Content").padding = new RectOffset(1, 1, 0, 0); _colorHint.SetButtonTextSize(4f); _colorHint.interactable = false; rt = _colorHint.transform as RectTransform; rt.anchorMin = new Vector2(0f, 1f); rt.anchorMax = new Vector2(0f, 1f); rt.pivot = new Vector2(0f, 1f); rt.sizeDelta = new Vector2(6f, 6f); rt.anchoredPosition = new Vector2(3f, -2.5f); BeatSaberUI.AddHintText(rt, "Filter Color Legend\n" + "<color=#FF5555>Red</color> - Not applied\n" + "<color=#FFFF55>Yellow</color> - Not applied, but has changes\n" + "<color=#55FF55>Green</color> - Applied\n" + "<color=#55AAFF>Blue</color> - Applied, but has changes"); _colorHint.gameObject.SetActive(false); _listViewController = new GameObject("FilterListViewController").AddComponent <FilterListViewController>(); rt = _listViewController.rectTransform; rt.SetParent(this.transform, false); rt.anchorMin = new Vector2(0f, 1f); rt.anchorMax = new Vector2(0f, 1f); rt.pivot = new Vector2(0f, 1f); rt.sizeDelta = new Vector2(50f, 60f); rt.anchoredPosition = new Vector2(5f, -5f); _listViewController.FilterSelected += PresentFilterMenu; // container RectTransform that all controls will be placed in // 90f wide, 60f tall var containerImage = new GameObject("FilterSettingsContainer").AddComponent <Image>(); containerImage.sprite = Sprite.Create(Texture2D.blackTexture, new Rect(0f, 0f, 1f, 1f), Vector2.zero); containerImage.color = new Color(0f, 0f, 0f, 0f); containerImage.material = Utilities.NoGlowMaterial; _settingsRectTransform = containerImage.gameObject.transform as RectTransform; _settingsRectTransform.SetParent(this.transform, false); _settingsRectTransform.anchorMin = Vector2.one; _settingsRectTransform.anchorMax = Vector2.one; _settingsRectTransform.pivot = Vector2.one; _settingsRectTransform.sizeDelta = new Vector2(90f, 60f); _settingsRectTransform.anchoredPosition = new Vector2(-5f, -5f); // add filters to the filter list here _listViewController.FilterList.Add(new DifficultyFilter()); _listViewController.FilterList.Add(new DurationFilter()); _listViewController.FilterList.Add(new NJSFilter()); _listViewController.FilterList.Add(new PPFilter()); _listViewController.FilterList.Add(new StarDifficultyFilter()); _listViewController.FilterList.Add(new VotedFilter()); _listViewController.FilterList.Add(new OtherFilter()); foreach (var filter in _listViewController.FilterList) { filter.SettingChanged += FilterSettingChanged; } _listViewController.FilterList[0].Init(); foreach (var control in _listViewController.FilterList[0].Controls) { control.Init(_settingsRectTransform); } // divider sprite Image divider = new GameObject("WhiteDivider").AddComponent <Image>(); divider.sprite = Sprite.Create(Texture2D.whiteTexture, new Rect(0f, 0f, 1f, 1f), Vector2.zero); divider.color = Color.white; divider.material = Utilities.NoGlowMaterial; rt = divider.rectTransform; rt.SetParent(_settingsRectTransform, false); rt.anchorMin = Vector2.zero; rt.anchorMax = new Vector2(0f, 1f); rt.pivot = new Vector2(1f, 0.5f); rt.sizeDelta = new Vector2(1f, 0f); rt.anchoredPosition = new Vector2(-8f, 0f); // loading screen _loadingSpinner = BeatSaberUI.CreateLoadingSpinner(this.transform); _loadingText = BeatSaberUI.CreateText(this.rectTransform, "", new Vector2(0f, 12f), new Vector2(80f, 50f)); _loadingText.alignment = TextAlignmentOptions.Center; _loadingText.fontSize = 5f; // info text _infoText = BeatSaberUI.CreateText(this.rectTransform, "", new Vector2(28f, 2f), new Vector2(36f, 8f)); _infoText.rectTransform.anchorMin = Vector2.zero; _infoText.rectTransform.anchorMax = Vector2.zero; _infoText.rectTransform.pivot = Vector2.zero; _infoText.alignment = TextAlignmentOptions.Left; _infoText.fontSize = 3.5f; } // all buttons (except back) should not be interactable when loading beatmap details _clearButton.interactable = false; _resetButton.interactable = false; _applyButton.interactable = false; _unapplyButton.interactable = false; var originalLevels = _levels; _loadingSpinner.gameObject.SetActive(true); if (PluginConfig.ShowFirstTimeLoadingText) { _loadingText.text = "<color=#FF5555>Loading custom song details for the first time...</color>\n\n" + "This first load may take several minutes, depending on the number of custom songs you have\n(it usually takes about 10 to 15 seconds for every 100 songs).\n\n" + "<color=#CCFFCC>You may back out of this screen and have the loading occur in the background</color>,\nhowever, loading will pause when playing a level."; (_loadingSpinner.transform as RectTransform).anchoredPosition = new Vector2(0f, -20f); // force the player to load all custom beatmaps on first load, rather than just the selected levels // this is done instead of the old behaviour because SongBrowser will be able to apply filters outside of this view controller _levels = _levels.Union(SongCore.Loader.CustomLevels.Values).ToArray(); } else { _loadingText.text = "Loading song details..."; (_loadingSpinner.transform as RectTransform).anchoredPosition = Vector2.zero; } _loadingText.gameObject.SetActive(true); _infoText.text = GetLoadingProgressString(0, _levels.Length); _infoText.gameObject.SetActive(true); _settingsRectTransform.gameObject.SetActive(false); // _listViewController deactivated by DidDeactivate // load all songs so we have access to all the song details we need to filter BeatmapDetailsLoader.Instance.LoadBeatmaps(_levels, delegate(int songsLoaded) { // on update, show updated progress text _infoText.text = GetLoadingProgressString(songsLoaded, _levels.Length); }, delegate(BeatmapDetails[] levels) { // on finish _loadingSpinner.SetActive(false); _loadingText.gameObject.SetActive(false); _infoText.gameObject.SetActive(false); _clearButton.interactable = true; bool anyChanges = _listViewController.FilterList.Any(x => x.Status == FilterStatus.AppliedAndChanged || x.Status == FilterStatus.NotAppliedAndChanged); if (_listViewController.FilterList.Any(x => x.Status == FilterStatus.Applied) && !anyChanges) { _resetButton.interactable = false; _applyButton.interactable = false; _unapplyButton.interactable = true; _applyButton.gameObject.SetActive(false); _unapplyButton.gameObject.SetActive(true); } else { _resetButton.interactable = anyChanges; _applyButton.interactable = anyChanges; _unapplyButton.interactable = false; _applyButton.gameObject.SetActive(true); _unapplyButton.gameObject.SetActive(false); } _listViewController.__Activate(ActivationType.NotAddedToHierarchy); _listViewController.SetUserInteraction(true); _listViewController.RefreshTable(true); _colorHint.gameObject.SetActive(true); _settingsRectTransform.gameObject.SetActive(true); foreach (var control in _listViewController.CurrentFilter.Controls) { control.EnableControl(); } // if this was the first load, only take the beatmap details objects that correspond to the requested list of levels IPreviewBeatmapLevel[] requestedLevels; if (PluginConfig.ShowFirstTimeLoadingText) { requestedLevels = originalLevels; } else { requestedLevels = _levels; } _beatmapDetails = new Dictionary <BeatmapDetails, IPreviewBeatmapLevel>(requestedLevels.Length); foreach (var level in requestedLevels) { // remove the directory part of a custom level ID // see BeatmapDetailsLoader:GetLevelID() for more detail on why we do this var levelID = level.levelID.StartsWith("custom_level") ? level.levelID.Substring(0, 53) : level.levelID; var details = levels.FirstOrDefault(x => x?.LevelID == levelID); if (details == null) { continue; } _beatmapDetails[details] = level; } PluginConfig.ShowFirstTimeLoadingText = false; }); }
protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation && type == ActivationType.AddedToHierarchy) { _backButton = BeatSaberUI.CreateBackButton(rectTransform as RectTransform, delegate() { backButtonPressed?.Invoke(); }); RectTransform container = new GameObject("VideoListContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.sizeDelta = new Vector2(105f, 0f); _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageUpButton")), rectTransform, 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, -10f); (_pageUpButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _videosTableView.PageScrollUp(); }); _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), rectTransform, 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, 10f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _videosTableView.PageScrollDown(); }); _searchButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(60, -20), new Vector2(30, 8), () => { searchButtonPressed?.Invoke(); }, "Refine"); _downloadButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(60, -30), new Vector2(30, 8), () => { downloadButtonPressed?.Invoke(resultsList[_lastSelectedRow]); }, "Download"); _downloadButton.GetComponentInChildren <HorizontalLayoutGroup>().padding = new RectOffset(0, 0, 0, 0); _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); (_loadingIndicator.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(0f, 0f); _loadingIndicator.SetActive(true); _videoListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); _videosTableView = new GameObject().AddComponent <TableView>(); _videosTableView.transform.SetParent(container, false); _videosTableView.SetPrivateField("_isInitialized", false); _videosTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); _videosTableView.Init(); RectMask2D viewportMask = Instantiate(Resources.FindObjectsOfTypeAll <RectMask2D>().First(), _videosTableView.transform, false); viewportMask.transform.DetachChildren(); _videosTableView.GetComponentsInChildren <RectTransform>().First(x => x.name == "Content").transform.SetParent(viewportMask.rectTransform, false); (_videosTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0.5f); (_videosTableView.transform as RectTransform).anchorMax = new Vector2(1f, 0.5f); (_videosTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_videosTableView.transform as RectTransform).anchoredPosition = new Vector3(-10f, 0f); _videosTableView.dataSource = this; _videosTableView.didSelectRowEvent += _songsTableView_DidSelectRowEvent; } else { _videosTableView.ReloadData(); } _downloadButton.interactable = false; }