public static void SetText(this LevelListTableCell cell, string text) { cell.GetPrivateField <TextMeshProUGUI>("_songNameText").text = text; }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { try { if (firstActivation && activationType == ActivationType.AddedToHierarchy) { _beatmapCharacteristics = Resources.FindObjectsOfTypeAll <BeatmapCharacteristicSO>(); bool isHost = Client.Instance.isHost; _selectedSongCell = Instantiate(Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")), rectTransform, false); (_selectedSongCell.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_selectedSongCell.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_selectedSongCell.transform as RectTransform).anchoredPosition = new Vector2(-25f, 17.5f); _selectedSongCell.SetPrivateField("_beatmapCharacteristicAlphas", new float[0]); _selectedSongCell.SetPrivateField("_beatmapCharacteristicImages", new UnityEngine.UI.Image[0]); _selectedSongCell.SetPrivateField("_bought", true); foreach (var icon in _selectedSongCell.GetComponentsInChildren <UnityEngine.UI.Image>().Where(x => x.name.StartsWith("LevelTypeIcon"))) { Destroy(icon.gameObject); } _rankedText = this.CreateText("LOADING...", new Vector2(-1f, -25.5f)); _rankedText.alignment = TextAlignmentOptions.Center; Sprite[] sprites = Resources.FindObjectsOfTypeAll <Sprite>(); _timeParamText = CustomExtensions.CreateLevelParam(rectTransform, new Vector2(62f, 42.5f), "--", sprites.FirstOrDefault(x => x.name == "ClockIcon"), ""); _bpmParamText = CustomExtensions.CreateLevelParam(rectTransform, new Vector2(102f, 42.5f), "--", sprites.FirstOrDefault(x => x.name == "MetronomeIcon"), ""); _blocksParamText = CustomExtensions.CreateLevelParam(rectTransform, new Vector2(62f, 35f), "--", sprites.FirstOrDefault(x => x.name == "GameNoteIcon"), ""); _obstaclesParamText = CustomExtensions.CreateLevelParam(rectTransform, new Vector2(102f, 35f), "--", sprites.FirstOrDefault(x => x.name == "ObstacleIcon"), ""); _starsParamText = CustomExtensions.CreateLevelParam(rectTransform, new Vector2(62f, 27.5f), "--", Sprites.starIcon, ""); _ratingParamText = CustomExtensions.CreateLevelParam(rectTransform, new Vector2(102f, 27.5f), "--", Sprites.ratingIcon, ""); _playersReadyText = BeatSaberUI.CreateText(rectTransform, "0/0 players ready", new Vector2(0f, 5f)); _playersReadyText.rectTransform.anchorMin = new Vector2(0.5f, 0f); _playersReadyText.rectTransform.anchorMax = new Vector2(0.5f, 0f); _playersReadyText.alignment = TextAlignmentOptions.Center; _playersReadyText.fontSize = 5.5f; _cancelButton = BeatSaberUI.CreateUIButton(rectTransform, "CancelButton"); (_cancelButton.transform as RectTransform).anchoredPosition = new Vector2(-30f, -25f); (_cancelButton.transform as RectTransform).sizeDelta = new Vector2(28f, 12f); _cancelButton.SetButtonText("CANCEL"); _cancelButton.ToggleWordWrapping(false); _cancelButton.SetButtonTextSize(5.5f); _cancelButton.onClick.AddListener(delegate() { discardPressed?.Invoke(); }); _cancelButton.gameObject.SetActive(isHost); _playButton = BeatSaberUI.CreateUIButton(rectTransform, "CancelButton"); (_playButton.transform as RectTransform).anchoredPosition = new Vector2(30f, -25f); (_playButton.transform as RectTransform).sizeDelta = new Vector2(28f, 12f); _playButton.SetButtonText("PLAY"); _playButton.ToggleWordWrapping(false); _playButton.SetButtonTextSize(5.5f); _playButton.onClick.AddListener(delegate() { playPressed?.Invoke(_selectedSong, selectedCharacteristic, selectedDifficulty); }); var playGlowContainer = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => x.name == "PlayButton").GetComponentsInChildren <RectTransform>().First(x => x.name == "GlowContainer"), _playButton.transform); //Let's add some glow! playGlowContainer.transform.SetAsFirstSibling(); _playBtnGlow = playGlowContainer.GetComponentInChildren <UnityEngine.UI.Image>(); _playBtnGlow.color = new Color(0f, 0.7058824f, 1f, 0.7843137f); _playButton.gameObject.SetActive(isHost); _characteristicControl = BeatSaberUI.CreateTextSegmentedControl(rectTransform, new Vector2(0f, 34f), new Vector2(110f, 7f), _characteristicControl_didSelectCellEvent); _characteristicControl.SetTexts(new string[] { "Standard", "No Arrows", "One Saber" }); _characteristicControlBlocker = new GameObject("CharacteristicControlBlocker", typeof(RectTransform)).GetComponent <RectTransform>(); //"If it works it's not stupid" _characteristicControlBlocker.SetParent(rectTransform, false); _characteristicControlBlocker.gameObject.AddComponent <UnityEngine.UI.Image>().color = new Color(0f, 0f, 0f, 0f); _characteristicControlBlocker.anchorMin = new Vector2(0f, 1f); _characteristicControlBlocker.anchorMax = new Vector2(1f, 1f); _characteristicControlBlocker.sizeDelta = new Vector2(-30f, 7f); _characteristicControlBlocker.anchoredPosition = new Vector2(0f, -6f); _difficultyControl = BeatSaberUI.CreateTextSegmentedControl(rectTransform, new Vector2(0f, 24f), new Vector2(110f, 7f), _difficultyControl_didSelectCellEvent); _difficultyControl.SetTexts(new string[] { "Easy", "Normal", "Hard", "Expert", "Expert+" }); _difficultyControlBlocker = new GameObject("DifficultyControlBlocker", typeof(RectTransform)).GetComponent <RectTransform>(); //"If it works it's not stupid" _difficultyControlBlocker.SetParent(rectTransform, false); _difficultyControlBlocker.gameObject.AddComponent <UnityEngine.UI.Image>().color = new Color(0f, 0f, 0f, 0f); _difficultyControlBlocker.anchorMin = new Vector2(0f, 1f); _difficultyControlBlocker.anchorMax = new Vector2(1f, 1f); _difficultyControlBlocker.sizeDelta = new Vector2(-30f, 7f); _difficultyControlBlocker.anchoredPosition = new Vector2(0f, -16f); _progressBarRect = new GameObject("ProgressBar", typeof(RectTransform)).GetComponent <RectTransform>(); _progressBarRect.SetParent(rectTransform, false); _progressBarRect.anchorMin = new Vector2(0.5f, 0.5f); _progressBarRect.anchorMax = new Vector2(0.5f, 0.5f); _progressBarRect.anchoredPosition = new Vector2(0f, -7.5f); _progressBarRect.sizeDelta = new Vector2(46f, 5f); _progressBackground = new GameObject("Background", typeof(RectTransform), typeof(UnityEngine.UI.Image)).GetComponent <UnityEngine.UI.Image>(); _progressBackground.rectTransform.SetParent(_progressBarRect, false); _progressBackground.rectTransform.anchorMin = new Vector2(0f, 0f); _progressBackground.rectTransform.anchorMax = new Vector2(1f, 1f); _progressBackground.rectTransform.anchoredPosition = new Vector2(0f, 0f); _progressBackground.rectTransform.sizeDelta = new Vector2(0f, 0f); _progressBackground.sprite = Sprites.whitePixel; _progressBackground.material = Sprites.NoGlowMat; _progressBackground.color = new Color(1f, 1f, 1f, 0.075f); _progressBarImage = new GameObject("ProgressImage", typeof(RectTransform), typeof(UnityEngine.UI.Image)).GetComponent <UnityEngine.UI.Image>(); _progressBarImage.rectTransform.SetParent(_progressBarRect, false); _progressBarImage.rectTransform.anchorMin = new Vector2(0f, 0f); _progressBarImage.rectTransform.anchorMax = new Vector2(1f, 1f); _progressBarImage.rectTransform.anchoredPosition = new Vector2(0f, 0f); _progressBarImage.rectTransform.sizeDelta = new Vector2(0f, 0f); _progressBarImage.sprite = Sprites.whitePixel; _progressBarImage.material = Sprites.NoGlowMat; _progressBarImage.type = UnityEngine.UI.Image.Type.Filled; _progressBarImage.fillMethod = UnityEngine.UI.Image.FillMethod.Horizontal; _progressBarImage.fillAmount = 0.5f; _progressText = BeatSaberUI.CreateText(rectTransform, "0.0%", new Vector2(55f, -10f)); _progressText.rectTransform.SetParent(_progressBarRect, true); _loadingSpinner = this.CreateLoadingSpinner(); _playButton.interactable = false; _progressBarRect.gameObject.SetActive(false); } _progressBarRect.gameObject.SetActive(false); } catch (Exception e) { Plugin.log.Critical($"Exception in DifficultySelectionViewController.DidActivate: {e}"); } }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation && activationType == ActivationType.AddedToHierarchy) { bool isHost = Client.Instance.isHost; _selectedSongCell = Instantiate(Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")), rectTransform, false); (_selectedSongCell.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_selectedSongCell.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_selectedSongCell.transform as RectTransform).anchoredPosition = new Vector2(-25f, 7.5f); _selectDifficultyText = BeatSaberUI.CreateText(rectTransform, "Select difficulty:", new Vector2(0f, 20f)); _selectDifficultyText.alignment = TextAlignmentOptions.Center; _selectDifficultyText.fontSize = 7f; _selectDifficultyText.gameObject.SetActive(isHost); _playersReadyText = BeatSaberUI.CreateText(rectTransform, "0/0 players ready", new Vector2(0f, 5f)); _playersReadyText.rectTransform.anchorMin = new Vector2(0.5f, 0f); _playersReadyText.rectTransform.anchorMax = new Vector2(0.5f, 0f); _playersReadyText.alignment = TextAlignmentOptions.Center; _playersReadyText.fontSize = 5.5f; _cancelButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); (_cancelButton.transform as RectTransform).anchoredPosition = new Vector2(-30f, -25f); (_cancelButton.transform as RectTransform).sizeDelta = new Vector2(28f, 12f); _cancelButton.SetButtonText("CANCEL"); _cancelButton.ToggleWordWrapping(false); _cancelButton.SetButtonTextSize(5.5f); _cancelButton.onClick.AddListener(delegate() { DiscardPressed?.Invoke(); }); _cancelButton.gameObject.SetActive(isHost); _playButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); (_playButton.transform as RectTransform).anchoredPosition = new Vector2(30f, -25f); (_playButton.transform as RectTransform).sizeDelta = new Vector2(28f, 12f); _playButton.SetButtonText("PLAY"); _playButton.ToggleWordWrapping(false); _playButton.SetButtonTextSize(5.5f); _playButton.onClick.AddListener(delegate() { PlayPressed?.Invoke(_selectedSong, _selectedDifficulty); }); _playButton.gameObject.SetActive(isHost); float buttonsY = 30f; float buttonsStartX = -47.5f; float butonsSizeX = 24f; _easyButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); (_easyButton.transform as RectTransform).anchoredPosition = new Vector2(buttonsStartX, buttonsY); (_easyButton.transform as RectTransform).sizeDelta = new Vector2(butonsSizeX - 1f, 10f); _easyButton.SetButtonText("EASY"); _easyButton.ToggleWordWrapping(false); _easyButton.onClick.AddListener(delegate() { _selectedDifficulty = BeatmapDifficulty.Easy; UpdateButtons(); }); _easyButton.gameObject.SetActive(isHost); _normalButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); (_normalButton.transform as RectTransform).anchoredPosition = new Vector2(buttonsStartX + butonsSizeX, buttonsY); (_normalButton.transform as RectTransform).sizeDelta = new Vector2(butonsSizeX - 1f, 10f); _normalButton.SetButtonText("NORMAL"); _normalButton.ToggleWordWrapping(false); _normalButton.onClick.AddListener(delegate() { _selectedDifficulty = BeatmapDifficulty.Normal; UpdateButtons(); }); _normalButton.gameObject.SetActive(isHost); _hardButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); (_hardButton.transform as RectTransform).anchoredPosition = new Vector2(buttonsStartX + 2 * butonsSizeX, buttonsY); (_hardButton.transform as RectTransform).sizeDelta = new Vector2(butonsSizeX - 1f, 10f); _hardButton.SetButtonText("HARD"); _hardButton.ToggleWordWrapping(false); _hardButton.onClick.AddListener(delegate() { _selectedDifficulty = BeatmapDifficulty.Hard; UpdateButtons(); }); _hardButton.gameObject.SetActive(isHost); _expertButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); (_expertButton.transform as RectTransform).anchoredPosition = new Vector2(buttonsStartX + 3 * butonsSizeX, buttonsY); (_expertButton.transform as RectTransform).sizeDelta = new Vector2(butonsSizeX - 1f, 10f); _expertButton.SetButtonText("EXPERT"); _expertButton.ToggleWordWrapping(false); _expertButton.onClick.AddListener(delegate() { _selectedDifficulty = BeatmapDifficulty.Expert; UpdateButtons(); }); _expertButton.gameObject.SetActive(isHost); _expertPlusButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); (_expertPlusButton.transform as RectTransform).anchoredPosition = new Vector2(buttonsStartX + 4 * butonsSizeX, buttonsY); (_expertPlusButton.transform as RectTransform).sizeDelta = new Vector2(butonsSizeX - 1f, 10f); _expertPlusButton.SetButtonText("EXPERT+"); _expertPlusButton.ToggleWordWrapping(false); _expertPlusButton.onClick.AddListener(delegate() { _selectedDifficulty = BeatmapDifficulty.ExpertPlus; UpdateButtons(); }); _expertPlusButton.gameObject.SetActive(isHost); _progressBarRect = new GameObject("ProgressBar", typeof(RectTransform)).GetComponent <RectTransform>(); _progressBarRect.SetParent(rectTransform, false); _progressBarRect.anchorMin = new Vector2(0.5f, 0.5f); _progressBarRect.anchorMax = new Vector2(0.5f, 0.5f); _progressBarRect.anchoredPosition = new Vector2(0f, -7.5f); _progressBarRect.sizeDelta = new Vector2(46f, 5f); _progressBackground = new GameObject("Background", typeof(RectTransform), typeof(Image)).GetComponent <Image>(); _progressBackground.rectTransform.SetParent(_progressBarRect, false); _progressBackground.rectTransform.anchorMin = new Vector2(0f, 0f); _progressBackground.rectTransform.anchorMax = new Vector2(1f, 1f); _progressBackground.rectTransform.anchoredPosition = new Vector2(0f, 0f); _progressBackground.rectTransform.sizeDelta = new Vector2(0f, 0f); _progressBackground.sprite = Sprites.whitePixel; _progressBackground.material = Sprites.NoGlowMat; _progressBackground.color = new Color(1f, 1f, 1f, 0.075f); _progressBarImage = new GameObject("ProgressImage", typeof(RectTransform), typeof(Image)).GetComponent <Image>(); _progressBarImage.rectTransform.SetParent(_progressBarRect, false); _progressBarImage.rectTransform.anchorMin = new Vector2(0f, 0f); _progressBarImage.rectTransform.anchorMax = new Vector2(1f, 1f); _progressBarImage.rectTransform.anchoredPosition = new Vector2(0f, 0f); _progressBarImage.rectTransform.sizeDelta = new Vector2(0f, 0f); _progressBarImage.sprite = Sprites.whitePixel; _progressBarImage.material = Sprites.NoGlowMat; _progressBarImage.type = Image.Type.Filled; _progressBarImage.fillMethod = Image.FillMethod.Horizontal; _progressBarImage.fillAmount = 0.5f; _progressText = BeatSaberUI.CreateText(rectTransform, "0.0%", new Vector2(55f, -10f)); _progressText.rectTransform.SetParent(_progressBarRect, true); } _playButton.interactable = false; _progressBarRect.gameObject.SetActive(false); }
protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation && type == ActivationType.AddedToHierarchy) { _songTableCell = Instantiate(Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")), rectTransform); (_songTableCell.transform as RectTransform).anchoredPosition = new Vector2(100f, -1.5f); _songTableCell.SetPrivateField("_beatmapCharacteristicAlphas", new float[0]); _songTableCell.SetPrivateField("_beatmapCharacteristicImages", new UnityEngine.UI.Image[0]); _songTableCell.SetPrivateField("_bought", true); foreach (var icon in _songTableCell.GetComponentsInChildren <UnityEngine.UI.Image>().Where(x => x.name.StartsWith("LevelTypeIcon"))) { Destroy(icon.gameObject); } _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(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, -12.5f); (_pageUpButton.transform as RectTransform).sizeDelta = new Vector2(40f, 6f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _leaderboardTableView.PageScrollUp(); }); _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, 7f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 6f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _leaderboardTableView.PageScrollDown(); }); _pageDownButton.interactable = false; _playNowButton = this.CreateUIButton("CancelButton", new Vector2(-39f, 34.5f), new Vector2(28f, 8.8f), () => { playNowButtonPressed?.Invoke(); }, "Play now"); _playNowButton.ToggleWordWrapping(false); _progressText = BeatSaberUI.CreateText(rectTransform, "0.0%", new Vector2(8f, 32f)); _progressText.gameObject.SetActive(false); _leaderboardTableCellInstance = Resources.FindObjectsOfTypeAll <LeaderboardTableCell>().First(x => (x.name == "LeaderboardTableCell")); RectTransform container = new GameObject("Content", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.anchorMin = new Vector2(0.15f, 0.5f); container.anchorMax = new Vector2(0.85f, 0.5f); container.sizeDelta = new Vector2(0f, 56f); container.anchoredPosition = new Vector2(0f, -3f); var tableGameObject = new GameObject("CustomTableView"); tableGameObject.SetActive(false); _leaderboardTableView = tableGameObject.AddComponent <TableView>(); _leaderboardTableView.gameObject.AddComponent <RectMask2D>(); _leaderboardTableView.transform.SetParent(container, false); _leaderboardTableView.SetPrivateField("_isInitialized", false); _leaderboardTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); tableGameObject.SetActive(true); RectMask2D viewportMask = Instantiate(Resources.FindObjectsOfTypeAll <RectMask2D>().First(), _leaderboardTableView.transform, false); viewportMask.transform.DetachChildren(); _leaderboardTableView.GetComponentsInChildren <RectTransform>().First(x => x.name == "Content").transform.SetParent(viewportMask.rectTransform, false); (_leaderboardTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (_leaderboardTableView.transform as RectTransform).anchorMax = new Vector2(1f, 1f); (_leaderboardTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 0f); (_leaderboardTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f); ReflectionUtil.SetPrivateField(_leaderboardTableView, "_pageUpButton", _pageUpButton); ReflectionUtil.SetPrivateField(_leaderboardTableView, "_pageDownButton", _pageDownButton); _leaderboardTableView.dataSource = this; _timerText = BeatSaberUI.CreateText(rectTransform, "", new Vector2(0f, 34f)); _timerText.fontSize = 8f; _timerText.alignment = TextAlignmentOptions.Center; _timerText.rectTransform.sizeDelta = new Vector2(30f, 6f); } }
protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation && type == ActivationType.AddedToHierarchy) { DownloadController.Instance.OnDownloaderListChanged -= Refresh; DownloadController.Instance.OnDownloadStateChanged -= DownloaderStateChanged; _songListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); _titleText = BeatSaberUI.CreateText(rectTransform, "DOWNLOAD QUEUE", new Vector2(0f, 35f)); _titleText.alignment = TextAlignmentOptions.Top; _titleText.fontSize = 6f; _manualDownloadText = BeatSaberUI.CreateText(rectTransform, "Manual Restart Required", new Vector2(37f, -3f)); _manualDownloadText.alignment = TextAlignmentOptions.Top; _manualDownloadText.fontSize = 4f; _manualDownloadText.gameObject.SetActive(false); _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(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(TableXOffset, -14f); (_pageUpButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _scroller.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(TableXOffset, 8f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _scroller.PageScrollDown(); }); var gobj = new GameObject("DownloadTable"); gobj.SetActive(false); _currentlyUpdatingTableView = gobj.AddComponent <TableView>(); _currentlyUpdatingTableView.transform.SetParent(rectTransform, false); _currentlyUpdatingTableView.SetPrivateField("_isInitialized", false); _currentlyUpdatingTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); var viewport = new GameObject("Viewport").AddComponent <RectTransform>(); viewport.SetParent(gobj.GetComponent <RectTransform>(), false); gobj.GetComponent <ScrollRect>().viewport = viewport; /*RectMask2D viewportMask = Instantiate(Resources.FindObjectsOfTypeAll<RectMask2D>().First(), _currentlyUpdatingTableView.transform, false); * viewportMask.transform.DetachChildren(); * _currentlyUpdatingTableView.GetComponentsInChildren<RectTransform>().First(x => x.name == "Content").transform.SetParent(viewportMask.rectTransform, false);*/ (_currentlyUpdatingTableView.transform as RectTransform).anchorMin = new Vector2(0.3f, 0.5f); (_currentlyUpdatingTableView.transform as RectTransform).anchorMax = new Vector2(0.7f, 0.5f); (_currentlyUpdatingTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_currentlyUpdatingTableView.transform as RectTransform).anchoredPosition = new Vector3(TableXOffset, -20f); ReflectionUtil.SetPrivateField(_currentlyUpdatingTableView, "_pageUpButton", _pageUpButton); ReflectionUtil.SetPrivateField(_currentlyUpdatingTableView, "_pageDownButton", _pageDownButton); _currentlyUpdatingTableView.selectionType = TableViewSelectionType.None; _currentlyUpdatingTableView.Init(); _currentlyUpdatingTableView.dataSource = this; // calls Init _scroller = gobj.GetComponent <TableViewScroller>(); gobj.SetActive(true); gobj.GetComponent <ScrollRect>().content.anchorMax = new Vector2(.6f, 1f); _currentlyUpdatingTableView.RefreshScrollButtons(); _checkForUpdates = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(ButtonXOffset, -30f), ButtonSize, CheckUpdates, "Check for updates"); _checkForUpdates.interactable = DownloadController.Instance.CanCheck || DownloadController.Instance.CanReset; _checkForUpdates.ToggleWordWrapping(false); _downloadUpdates = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(ButtonXOffset, -19f), ButtonSize, DownloadUpdates, "Download Updates"); _downloadUpdates.interactable = DownloadController.Instance.CanDownload; _downloadUpdates.ToggleWordWrapping(false); _restartGame = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(ButtonXOffset, -8f), ButtonSize, Restart, "Restart Game"); _restartGame.interactable = DownloadController.Instance.HadUpdates; _restartGame.ToggleWordWrapping(false); } DownloadController.Instance.OnDownloaderListChanged += Refresh; DownloadController.Instance.OnDownloadStateChanged += DownloaderStateChanged; DownloaderStateChanged(); }
private void FirstActivation() { LoadAllAvatars(); _tableCellTemplate = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => x.name == "LevelListTableCell"); RectTransform container = new GameObject("AvatarsListContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.sizeDelta = new Vector2(70f, 0f); var tableViewObject = new GameObject("AvatarsListTableView"); tableViewObject.SetActive(false); _tableView = tableViewObject.AddComponent <TableView>(); _tableView.gameObject.AddComponent <RectMask2D>(); _tableView.transform.SetParent(container, false); (_tableView.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (_tableView.transform as RectTransform).anchorMax = new Vector2(1f, 1f); (_tableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_tableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f); _tableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); _tableView.SetPrivateField("_isInitialized", false); _tableView.dataSource = this; _tableView.didSelectCellWithIdxEvent += _TableView_DidSelectRowEvent; tableViewObject.SetActive(true); _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageUpButton")), container, false); (_pageUpButton.transform as RectTransform).anchoredPosition = new Vector2(0f, 30f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _tableView.PageScrollUp(); }); _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), container, false); (_pageDownButton.transform as RectTransform).anchoredPosition = new Vector2(0f, -30f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _tableView.PageScrollDown(); }); _versionNumber = BeatSaberUI.CreateText(rectTransform, Plugin.Instance.Version, new Vector2(-10f, 10f)); (_versionNumber.transform as RectTransform).anchorMax = new Vector2(1f, 0f); (_versionNumber.transform as RectTransform).anchorMin = new Vector2(1f, 0f); _versionNumber.fontSize = 5; _versionNumber.color = Color.white; if (_backButton == null) { _backButton = BeatSaberUI.CreateBackButton(rectTransform as RectTransform); _backButton.onClick.AddListener(delegate() { onBackPressed(); DestroyPreview(); }); } }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { if (activationType == ActivationType.AddedToHierarchy) { _serverTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); _selectText = BeatSaberUI.CreateText(rectTransform, "Select ServerHub", new Vector2(0f, 35.5f)); _selectText.alignment = TextAlignmentOptions.Center; _selectText.fontSize = 7f; _backButton = BeatSaberUI.CreateBackButton(rectTransform); _backButton.onClick.AddListener(delegate() { didFinishEvent?.Invoke(); }); _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(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, -4.5f); (_pageUpButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _serverHubsTableView.GetPrivateField <TableViewScroller>("_scroller").PageScrollUp(); }); _pageUpButton.interactable = true; _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, -1f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _serverHubsTableView.GetPrivateField <TableViewScroller>("_scroller").PageScrollDown(); }); _pageDownButton.interactable = true; RectTransform container = new GameObject("Container", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.anchorMin = new Vector2(0.3f, 0.5f); container.anchorMax = new Vector2(0.7f, 0.5f); container.sizeDelta = new Vector2(0f, 60f); container.anchoredPosition = new Vector2(0f, -3f); var tableGameObject = new GameObject("CustomTableView"); tableGameObject.SetActive(false); _serverHubsTableView = tableGameObject.AddComponent <TableView>(); _serverHubsTableView.gameObject.AddComponent <RectMask2D>(); _serverHubsTableView.transform.SetParent(container, false); _serverHubsTableView.SetPrivateField("_isInitialized", false); _serverHubsTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); RectTransform viewport = new GameObject("Viewport").AddComponent <RectTransform>(); viewport.SetParent(_serverHubsTableView.transform, false); (viewport.transform as RectTransform).sizeDelta = new Vector2(0f, 0f); (viewport.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (viewport.transform as RectTransform).anchorMax = new Vector2(1f, 1f); _serverHubsTableView.GetComponent <ScrollRect>().viewport = viewport; _serverHubsTableView.Init(); (_serverHubsTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (_serverHubsTableView.transform as RectTransform).anchorMax = new Vector2(1f, 1f); (_serverHubsTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 0f); (_serverHubsTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f); tableGameObject.SetActive(true); _serverHubsTableView.didSelectCellWithIdxEvent += ServerHubs_didSelectRowEvent; _serverHubsTableView.dataSource = this; _serverHubsTableView.ScrollToCellWithIdx(0, TableViewScroller.ScrollPositionType.Beginning, false); } } else { _serverHubsTableView.dataSource = this; } }
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; }
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(75f, 0f); rectTransform.pivot = new Vector2(0.5f, 0.5f); _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(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, -9f); (_pageUpButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _songsTableView.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, 9f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _songsTableView.PageScrollDown(); }); _songListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); RectTransform container = new GameObject("CustomListContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.anchorMin = new Vector2(0f, 0.5f); container.anchorMax = new Vector2(1f, 0.5f); container.sizeDelta = new Vector2(0f, 0f); container.anchoredPosition = new Vector2(0f, 0f); var gameObject = new GameObject("CustomTableView", typeof(RectTransform)); gameObject.SetActive(false); _songsTableView = gameObject.AddComponent <TableView>(); _songsTableView.gameObject.AddComponent <RectMask2D>(); _songsTableView.transform.SetParent(container, false); _songsTableView.SetPrivateField("_isInitialized", false); _songsTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); _songsTableView.Init(); gameObject.SetActive(true); (_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, 0f); _songsTableView.dataSource = this; _songsTableView.ScrollToCellWithIdx(0, TableView.ScrollPositionType.Beginning, false); _lastSelectedRow = -1; _songsTableView.didSelectCellWithIdxEvent += _songsTableView_DidSelectRowEvent; } else { _songsTableView.ReloadData(); _songsTableView.ScrollToCellWithIdx(0, TableView.ScrollPositionType.Beginning, false); _lastSelectedRow = -1; } }
protected override void DidActivate(bool firstActivation, bool addedToHierarchy, bool screenSystemEnabling) { if (firstActivation) { if (!SongCore.Loader.AreSongsLoaded) { SongCore.Loader.SongsLoadedEvent += SongLoader_SongsLoadedEvent; } Plugin.Log("DidActivate 001"); // get table cell instance _requestListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First((LevelListTableCell x) => x.name == "LevelListTableCell"); // initialize Yes/No modal YesNoModal.instance.Setup(); Plugin.Log("DidActivate 002"); _songPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault(); RectTransform container = new GameObject("RequestBotContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); #region TableView Setup and Initialization var go = new GameObject("SongRequestTableView", typeof(RectTransform)); go.SetActive(false); go.AddComponent <ScrollRect>(); go.AddComponent <Touchable>(); go.AddComponent <EventSystemListener>(); ScrollView scrollView = go.AddComponent <ScrollView>(); _songListTableView = go.AddComponent <TableView>(); go.AddComponent <RectMask2D>(); _songListTableView.transform.SetParent(container, false); _songListTableView.SetField("_preallocatedCells", new TableView.CellsGroup[0]); _songListTableView.SetField("_isInitialized", false); _songListTableView.SetField("_scrollView", scrollView); var viewport = new GameObject("Viewport").AddComponent <RectTransform>(); viewport.SetParent(go.GetComponent <RectTransform>(), false); go.GetComponent <ScrollRect>().viewport = viewport; (viewport.transform as RectTransform).sizeDelta = new Vector2(70f, 70f); RectTransform content = new GameObject("Content").AddComponent <RectTransform>(); content.SetParent(viewport, false); scrollView.SetField("_contentRectTransform", content); scrollView.SetField("_viewport", viewport); _songListTableView.SetDataSource(this, false); _songListTableView.LazyInit(); go.SetActive(true); (_songListTableView.transform as RectTransform).sizeDelta = new Vector2(70f, 70f); (_songListTableView.transform as RectTransform).anchoredPosition = new Vector2(3f, 0f); _songListTableView.didSelectCellWithIdxEvent += DidSelectRow; _pageUpButton = UIHelper.CreateUIButton("SRMPageUpButton", container, "PracticeButton", new Vector2(0f, 38.5f), new Vector2(15f, 7f), () => { scrollView.PageUpButtonPressed(); }, "Ë„"); Destroy(_pageUpButton.GetComponentsInChildren <ImageView>().FirstOrDefault(x => x.name == "Underline")); _pageDownButton = UIHelper.CreateUIButton("SRMPageDownButton", container, "PracticeButton", new Vector2(0f, -38.5f), new Vector2(15f, 7f), () => { scrollView.PageDownButtonPressed(); }, "Ë…"); Destroy(_pageDownButton.GetComponentsInChildren <ImageView>().FirstOrDefault(x => x.name == "Underline")); #endregion CenterKeys = new KEYBOARD(container, "", false, -15, 15); #if UNRELEASED // BUG: Need additional modes disabling one shot buttons // BUG: Need to make sure the buttons are usable on older headsets Plugin.Log("DidActivate 005"); _CurrentSongName = BeatSaberUI.CreateText(container, "", new Vector2(-35, 37f)); _CurrentSongName.fontSize = 3f; _CurrentSongName.color = Color.cyan; _CurrentSongName.alignment = TextAlignmentOptions.Left; _CurrentSongName.enableWordWrapping = false; _CurrentSongName.text = ""; _CurrentSongName2 = BeatSaberUI.CreateText(container, "", new Vector2(-35, 34f)); _CurrentSongName2.fontSize = 3f; _CurrentSongName2.color = Color.cyan; _CurrentSongName2.alignment = TextAlignmentOptions.Left; _CurrentSongName2.enableWordWrapping = false; _CurrentSongName2.text = ""; //CenterKeys.AddKeys(SONGLISTKEY); if (!RequestBot.AddKeyboard(CenterKeys, "mainpanel.kbd")) { CenterKeys.AddKeys(SONGLISTKEY); } ColorDeckButtons(CenterKeys, Color.white, Color.magenta); #endif RequestBot.AddKeyboard(CenterKeys, "CenterPanel.kbd"); CenterKeys.DefaultActions(); #region History button // History button _historyButton = UIHelper.CreateUIButton("SRMHistory", container, "PracticeButton", new Vector2(53f, 30f), new Vector2(25f, 15f), () => { isShowingHistory = !isShowingHistory; RequestBot.SetTitle(isShowingHistory ? "Song Request History" : "Song Request Queue"); if (NumberOfCells() > 0) { _songListTableView.ScrollToCellWithIdx(0, TableView.ScrollPositionType.Beginning, false); _songListTableView.SelectCellWithIdx(0); _selectedRow = 0; } else { _selectedRow = -1; } UpdateRequestUI(true); SetUIInteractivity(); _lastSelection = -1; }, "History"); _historyButton.ToggleWordWrapping(false); _historyHintText = UIHelper.AddHintText(_historyButton.transform as RectTransform, ""); #endregion #region Blacklist button // Blacklist button _blacklistButton = UIHelper.CreateUIButton("SRMBlacklist", container, "PracticeButton", new Vector2(53f, 10f), new Vector2(25f, 15f), () => { if (NumberOfCells() > 0) { void _onConfirm() { RequestBot.Blacklist(_selectedRow, isShowingHistory, true); if (_selectedRow > 0) { _selectedRow--; } confirmDialogActive = false; } // get song var song = SongInfoForRow(_selectedRow).song; // indicate dialog is active confirmDialogActive = true; // show dialog YesNoModal.instance.ShowDialog("Blacklist Song Warning", $"Blacklisting {song["songName"].Value} by {song["authorName"].Value}\r\nDo you want to continue?", _onConfirm, () => { confirmDialogActive = false; }); } }, "Blacklist"); _blacklistButton.ToggleWordWrapping(false); UIHelper.AddHintText(_blacklistButton.transform as RectTransform, "Block the selected request from being queued in the future."); #endregion #region Skip button // Skip button _skipButton = UIHelper.CreateUIButton("SRMSkip", container, "PracticeButton", new Vector2(53f, 0f), new Vector2(25f, 15f), () => { if (NumberOfCells() > 0) { // get song var song = SongInfoForRow(_selectedRow).song; void _onConfirm() { // get selected song currentsong = SongInfoForRow(_selectedRow); // skip it RequestBot.Skip(_selectedRow); // select previous song if not first song if (_selectedRow > 0) { _selectedRow--; } // indicate dialog is no longer active confirmDialogActive = false; } // indicate dialog is active confirmDialogActive = true; // show dialog YesNoModal.instance.ShowDialog("Skip Song Warning", $"Skipping {song["songName"].Value} by {song["authorName"].Value}\r\nDo you want to continue?", _onConfirm, () => { confirmDialogActive = false; }); } }, "Skip"); _skipButton.ToggleWordWrapping(false); UIHelper.AddHintText(_skipButton.transform as RectTransform, "Remove the selected request from the queue."); #endregion #region Play button // Play button _playButton = UIHelper.CreateUIButton("SRMPlay", container, "ActionButton", new Vector2(53f, -10f), new Vector2(25f, 15f), () => { if (NumberOfCells() > 0) { currentsong = SongInfoForRow(_selectedRow); RequestBot.played.Add(currentsong.song); RequestBot.WriteJSON(RequestBot.playedfilename, ref RequestBot.played); SetUIInteractivity(false); RequestBot.Process(_selectedRow, isShowingHistory); _selectedRow = -1; } }, "Play"); ((RectTransform)_playButton.transform).localScale = Vector3.one; _playButton.GetComponent <NoTransitionsButton>().enabled = true; _playButton.ToggleWordWrapping(false); _playButton.interactable = ((isShowingHistory && RequestHistory.Songs.Count > 0) || (!isShowingHistory && RequestQueue.Songs.Count > 0)); UIHelper.AddHintText(_playButton.transform as RectTransform, "Download and scroll to the currently selected request."); #endregion #region Queue button // Queue button _queueButton = UIHelper.CreateUIButton("SRMQueue", container, "PracticeButton", new Vector2(53f, -30f), new Vector2(25f, 15f), () => { RequestBotConfig.Instance.RequestQueueOpen = !RequestBotConfig.Instance.RequestQueueOpen; RequestBotConfig.Instance.Save(); RequestBot.WriteQueueStatusToFile(RequestBotConfig.Instance.RequestQueueOpen ? "Queue is open." : "Queue is closed."); RequestBot.Instance.QueueChatMessage(RequestBotConfig.Instance.RequestQueueOpen ? "Queue is open." : "Queue is closed."); UpdateRequestUI(); }, RequestBotConfig.Instance.RequestQueueOpen ? "Queue Open" : "Queue Closed"); _queueButton.ToggleWordWrapping(true); _queueButton.SetButtonUnderlineColor(RequestBotConfig.Instance.RequestQueueOpen ? Color.green : Color.red); _queueButton.SetButtonTextSize(3.5f); UIHelper.AddHintText(_queueButton.transform as RectTransform, "Open/Close the queue."); #endregion #region Websocket Connect Button // Websocket Connect button _websocketConnectButton = UIHelper.CreateUIButton("WSConnect", container, "PracticeButton", new Vector2(53f, -20f), new Vector2(25f, 15f), () => { ChatHandler.WebsocketHandlerConnect(); }, "Connect WS"); _websocketConnectButton.ToggleWordWrapping(true); _websocketConnectButton.SetButtonUnderlineColor(Color.red); _websocketConnectButton.SetButtonTextSize(3.5f); UIHelper.AddHintText(_websocketConnectButton.transform as RectTransform, "Connects the Websocket"); #endregion // Set default RequestFlowCoordinator title RequestBot.SetTitle(isShowingHistory ? "Song Request History" : "Song Request Queue"); } base.DidActivate(firstActivation, addedToHierarchy, screenSystemEnabling); if (addedToHierarchy) { _selectedRow = -1; _songListTableView.ClearSelection(); } UpdateRequestUI(); SetUIInteractivity(true); }
private async void SetDataFromLevelAsync(SongRequest request, LevelListTableCell _tableCell, int row) { var favouritesBadge = _tableCell.GetField <Image, LevelListTableCell>("_favoritesBadgeImage"); favouritesBadge.enabled = false; var highlight = (request.requestInfo.Length > 0) && (request.requestInfo[0] == '!'); var msg = highlight ? "MSG" : ""; var hasMessage = (request.requestInfo.Length > 0) && (request.requestInfo[0] == '!'); var isChallenge = request.requestInfo.IndexOf("!challenge", StringComparison.OrdinalIgnoreCase) >= 0; var pp = ""; var ppvalue = request.song["pp"].AsInt; if (ppvalue > 0) { pp = $" {ppvalue} PP"; } var dt = new RequestBot.DynamicText().AddSong(request.song).AddUser(ref request.requestor); // Get basic fields dt.Add("Status", request.status.ToString()); dt.Add("Info", (request.requestInfo != "") ? " / " + request.requestInfo : ""); dt.Add("RequestTime", request.requestTime.ToLocalTime().ToString("hh:mm")); var songDurationText = _tableCell.GetField <TextMeshProUGUI, LevelListTableCell>("_songDurationText"); songDurationText.text = request.song["songlength"].Value; var songBpm = _tableCell.GetField <TextMeshProUGUI, LevelListTableCell>("_songBpmText"); if (!request.requestor.IsModerator && !request.requestor.IsVip) { (songBpm.transform as RectTransform).anchoredPosition = new Vector2(-2.5f, -1.8f); } (songBpm.transform as RectTransform).sizeDelta += new Vector2(15f, 0f); var k = new List <string>(); if (hasMessage) { k.Add("MSG"); } if (isChallenge) { k.Add("VS"); } k.Add(request.song["id"]); songBpm.text = string.Join(" - ", k); var songBmpIcon = _tableCell.GetComponentsInChildren <Image>().LastOrDefault(c => string.Equals(c.name, "BpmIcon", StringComparison.OrdinalIgnoreCase)); if (songBmpIcon != null) { songBmpIcon.color = request.requestor.IsModerator ? Color.green : request.requestor.IsVip ? Color.magenta : Color.white; if (!request.requestor.IsModerator && !request.requestor.IsVip) { Destroy(songBmpIcon); } } var songName = _tableCell.GetField <TextMeshProUGUI, LevelListTableCell>("_songNameText"); songName.richText = true; songName.text = $"{request.song["songName"].Value} <size=50%>{RequestBot.GetRating(ref request.song)} <color=#3fff3f>{pp}</color></size>"; var author = _tableCell.GetField <TextMeshProUGUI, LevelListTableCell>("_songAuthorText"); author.richText = true; author.text = dt.Parse(RequestBot.QueueListRow2); var image = _tableCell.GetField <Image, LevelListTableCell>("_coverImage"); var imageSet = false; if (SongCore.Loader.AreSongsLoaded) { var level = CustomLevelForRow(row); if (level != null) { // set image from song's cover image var sprite = await level.GetCoverImageAsync(System.Threading.CancellationToken.None); image.sprite = sprite; imageSet = true; } } if (!imageSet) { var url = request.song["coverURL"].Value; if (!_cachedTextures.TryGetValue(url, out var tex)) { var b = await Plugin.WebClient.DownloadImage($"{url}", System.Threading.CancellationToken.None); tex = new Texture2D(2, 2); tex.LoadImage(b); try { _cachedTextures.Add(url, tex); } catch (Exception) { // ignored } } image.sprite = Base64Sprites.Texture2DToSprite(tex); } UIHelper.AddHintText(_tableCell.transform as RectTransform, dt.Parse(RequestBot.SongHintText)); }
protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation && type == ActivationType.AddedToHierarchy) { Downloader.Instance.songDownloaded += SongDownloaded; _songListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); _titleText = BeatSaberUI.CreateText(rectTransform, "DOWNLOAD QUEUE", new Vector2(0f, 36f)); _titleText.alignment = TextAlignmentOptions.Top; _titleText.fontSize = 7; _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() { _queuedSongsTableView.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, 8f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _queuedSongsTableView.PageScrollDown(); }); _queuedSongsTableView = new GameObject().AddComponent <TableView>(); _queuedSongsTableView.transform.SetParent(rectTransform, false); _queuedSongsTableView.SetPrivateField("_isInitialized", false); _queuedSongsTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); _queuedSongsTableView.Init(); RectMask2D viewportMask = Instantiate(Resources.FindObjectsOfTypeAll <RectMask2D>().First(), _queuedSongsTableView.transform, false); viewportMask.transform.DetachChildren(); _queuedSongsTableView.GetComponentsInChildren <RectTransform>().First(x => x.name == "Content").transform.SetParent(viewportMask.rectTransform, false); (_queuedSongsTableView.transform as RectTransform).anchorMin = new Vector2(0.3f, 0.5f); (_queuedSongsTableView.transform as RectTransform).anchorMax = new Vector2(0.7f, 0.5f); (_queuedSongsTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_queuedSongsTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, -3f); ReflectionUtil.SetPrivateField(_queuedSongsTableView, "_pageUpButton", _pageUpButton); ReflectionUtil.SetPrivateField(_queuedSongsTableView, "_pageDownButton", _pageDownButton); _queuedSongsTableView.dataSource = this; _abortButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(36f, -30f), new Vector2(20f, 10f), AbortDownloads, "Abort All"); _abortButton.ToggleWordWrapping(false); Downloader.Instance.songDownloaded += (Song song) => { Refresh(); }; } }
protected override void DidActivate(bool firstActivation, ActivationType type) { try { if (firstActivation) { ui = PlatformUI._instance; _songListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); RectTransform container = new GameObject("PlatformsListContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.sizeDelta = new Vector2(60f, 0f); _platformsTableView = new GameObject("PlatformsListTableView").AddComponent <TableView>(); _platformsTableView.gameObject.AddComponent <RectMask2D>(); _platformsTableView.transform.SetParent(container, false); (_platformsTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (_platformsTableView.transform as RectTransform).anchorMax = new Vector2(1f, 1f); (_platformsTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_platformsTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f); _platformsTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); _platformsTableView.SetPrivateField("_isInitialized", false); _platformsTableView.dataSource = this; _platformsTableView.didSelectRowEvent += _PlatformTableView_DidSelectRowEvent; _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageUpButton")), container, false); (_pageUpButton.transform as RectTransform).anchoredPosition = new Vector2(0f, 30f);//-14 _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _platformsTableView.PageScrollUp(); }); _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), container, false); (_pageDownButton.transform as RectTransform).anchoredPosition = new Vector2(0f, -30f);//8 _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _platformsTableView.PageScrollDown(); }); _versionNumber = Instantiate(Resources.FindObjectsOfTypeAll <TextMeshProUGUI>().First(x => (x.name == "Text")), rectTransform, false); (_versionNumber.transform as RectTransform).anchoredPosition = new Vector2(-10f, 10f); (_versionNumber.transform as RectTransform).anchorMax = new Vector2(1f, 0f); (_versionNumber.transform as RectTransform).anchorMin = new Vector2(1f, 0f); string versionNumber = (IllusionInjector.PluginManager.Plugins.Where(x => x.Name == "Custom Platforms").First()).Version; _versionNumber.text = "v" + versionNumber; _versionNumber.fontSize = 5; _versionNumber.color = Color.white; if (_backButton == null) { _backButton = BeatSaberUI.CreateBackButton(rectTransform as RectTransform); _backButton.onClick.AddListener(delegate() { if (platformListBackWasPressed != null) { platformListBackWasPressed(); } }); } } _platformsTableView.SelectRow(PlatformManager.Instance.currentPlatformIndex); _platformsTableView.ScrollToRow(PlatformManager.Instance.currentPlatformIndex, true); } catch (Exception e) { Console.WriteLine("EXCEPTION IN DidActivate: " + e); } }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation && activationType == ActivationType.AddedToHierarchy) { _beatmapCharacteristics = Resources.FindObjectsOfTypeAll <BeatmapCharacteristicSO>(); _standardCharacteristic = _beatmapCharacteristics.First(x => x.characteristicName == "Standard"); bool isHost = Client.Instance.isHost; _selectedSongCell = Instantiate(Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")), rectTransform, false); (_selectedSongCell.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_selectedSongCell.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_selectedSongCell.transform as RectTransform).anchoredPosition = new Vector2(-25f, 7.5f); _selectedSongCell.SetPrivateField("_beatmapCharacteristicAlphas", new float[0]); _selectedSongCell.SetPrivateField("_beatmapCharacteristicImages", new UnityEngine.UI.Image[0]); _selectedSongCell.SetPrivateField("_bought", true); foreach (var icon in _selectedSongCell.GetComponentsInChildren <UnityEngine.UI.Image>().Where(x => x.name.StartsWith("LevelTypeIcon"))) { Destroy(icon.gameObject); } _playersReadyText = BeatSaberUI.CreateText(rectTransform, "0/0 players ready", new Vector2(0f, 5f)); _playersReadyText.rectTransform.anchorMin = new Vector2(0.5f, 0f); _playersReadyText.rectTransform.anchorMax = new Vector2(0.5f, 0f); _playersReadyText.alignment = TextAlignmentOptions.Center; _playersReadyText.fontSize = 5.5f; _cancelButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); (_cancelButton.transform as RectTransform).anchoredPosition = new Vector2(-30f, -25f); (_cancelButton.transform as RectTransform).sizeDelta = new Vector2(28f, 12f); _cancelButton.SetButtonText("CANCEL"); _cancelButton.ToggleWordWrapping(false); _cancelButton.SetButtonTextSize(5.5f); _cancelButton.onClick.AddListener(delegate() { discardPressed?.Invoke(); }); _cancelButton.gameObject.SetActive(isHost); _playButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); (_playButton.transform as RectTransform).anchoredPosition = new Vector2(30f, -25f); (_playButton.transform as RectTransform).sizeDelta = new Vector2(28f, 12f); _playButton.SetButtonText("PLAY"); _playButton.ToggleWordWrapping(false); _playButton.SetButtonTextSize(5.5f); _playButton.onClick.AddListener(delegate() { playPressed?.Invoke(_selectedSong, selectedCharacteristic, selectedDifficulty); }); _playButton.gameObject.SetActive(isHost); _characteristicControl = CustomExtensions.CreateTextSegmentedControl(rectTransform, new Vector2(0f, -6f), new Vector2(-30f, 7f)); _characteristicControl.SetTexts(new string[] { "Standard", "No Arrows", "One Saber" }); _characteristicControl.didSelectCellEvent += _characteristicControl_didSelectCellEvent; _characteristicControlBlocker = new GameObject("CharacteristicControlBlocker", typeof(RectTransform)).GetComponent <RectTransform>(); //"If it works it's not stupid" _characteristicControlBlocker.SetParent(rectTransform, false); _characteristicControlBlocker.gameObject.AddComponent <UnityEngine.UI.Image>().color = new Color(0f, 0f, 0f, 0f); _characteristicControlBlocker.anchorMin = new Vector2(0f, 1f); _characteristicControlBlocker.anchorMax = new Vector2(1f, 1f); _characteristicControlBlocker.sizeDelta = new Vector2(-30f, 7f); _characteristicControlBlocker.anchoredPosition = new Vector2(0f, -6f); _difficultyControl = CustomExtensions.CreateTextSegmentedControl(rectTransform, new Vector2(0f, -16f), new Vector2(-30f, 7f)); _difficultyControl.SetTexts(new string[] { "Easy", "Normal", "Hard", "Expert", "Expert+" }); _difficultyControl.didSelectCellEvent += _difficultyControl_didSelectCellEvent; _difficultyControlBlocker = new GameObject("DifficultyControlBlocker", typeof(RectTransform)).GetComponent <RectTransform>(); //"If it works it's not stupid" _difficultyControlBlocker.SetParent(rectTransform, false); _difficultyControlBlocker.gameObject.AddComponent <UnityEngine.UI.Image>().color = new Color(0f, 0f, 0f, 0f); _difficultyControlBlocker.anchorMin = new Vector2(0f, 1f); _difficultyControlBlocker.anchorMax = new Vector2(1f, 1f); _difficultyControlBlocker.sizeDelta = new Vector2(-30f, 7f); _difficultyControlBlocker.anchoredPosition = new Vector2(0f, -16f); _progressBarRect = new GameObject("ProgressBar", typeof(RectTransform)).GetComponent <RectTransform>(); _progressBarRect.SetParent(rectTransform, false); _progressBarRect.anchorMin = new Vector2(0.5f, 0.5f); _progressBarRect.anchorMax = new Vector2(0.5f, 0.5f); _progressBarRect.anchoredPosition = new Vector2(0f, -7.5f); _progressBarRect.sizeDelta = new Vector2(46f, 5f); _progressBackground = new GameObject("Background", typeof(RectTransform), typeof(UnityEngine.UI.Image)).GetComponent <UnityEngine.UI.Image>(); _progressBackground.rectTransform.SetParent(_progressBarRect, false); _progressBackground.rectTransform.anchorMin = new Vector2(0f, 0f); _progressBackground.rectTransform.anchorMax = new Vector2(1f, 1f); _progressBackground.rectTransform.anchoredPosition = new Vector2(0f, 0f); _progressBackground.rectTransform.sizeDelta = new Vector2(0f, 0f); _progressBackground.sprite = Sprites.whitePixel; _progressBackground.material = Sprites.NoGlowMat; _progressBackground.color = new Color(1f, 1f, 1f, 0.075f); _progressBarImage = new GameObject("ProgressImage", typeof(RectTransform), typeof(UnityEngine.UI.Image)).GetComponent <UnityEngine.UI.Image>(); _progressBarImage.rectTransform.SetParent(_progressBarRect, false); _progressBarImage.rectTransform.anchorMin = new Vector2(0f, 0f); _progressBarImage.rectTransform.anchorMax = new Vector2(1f, 1f); _progressBarImage.rectTransform.anchoredPosition = new Vector2(0f, 0f); _progressBarImage.rectTransform.sizeDelta = new Vector2(0f, 0f); _progressBarImage.sprite = Sprites.whitePixel; _progressBarImage.material = Sprites.NoGlowMat; _progressBarImage.type = UnityEngine.UI.Image.Type.Filled; _progressBarImage.fillMethod = UnityEngine.UI.Image.FillMethod.Horizontal; _progressBarImage.fillAmount = 0.5f; _progressText = BeatSaberUI.CreateText(rectTransform, "0.0%", new Vector2(55f, -10f)); _progressText.rectTransform.SetParent(_progressBarRect, true); } _playButton.interactable = false; _progressBarRect.gameObject.SetActive(false); }
public static void SetSubText(this LevelListTableCell cell, string subtext) { cell.GetPrivateField <TextMeshProUGUI>("_authorText").text = subtext; }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { if (activationType == ActivationType.AddedToHierarchy) { _serverTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); _selectText = BeatSaberUI.CreateText(rectTransform, "Select ServerHub", new Vector2(0f, 35.5f)); _selectText.alignment = TextAlignmentOptions.Center; _selectText.fontSize = 7f; _backButton = BeatSaberUI.CreateBackButton(rectTransform); _backButton.onClick.AddListener(delegate() { didFinishEvent?.Invoke(); }); _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(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, -14.5f); (_pageUpButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _serverHubsTableView.PageScrollUp(); }); _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, 9f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 10f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _serverHubsTableView.PageScrollDown(); }); _pageDownButton.interactable = false; _serverHubsTableView = new GameObject().AddComponent <TableView>(); _serverHubsTableView.transform.SetParent(rectTransform, false); _serverHubsTableView.SetPrivateField("_isInitialized", false); _serverHubsTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); _serverHubsTableView.Init(); RectMask2D viewportMask = Instantiate(Resources.FindObjectsOfTypeAll <RectMask2D>().First(), _serverHubsTableView.transform, false); viewportMask.transform.DetachChildren(); _serverHubsTableView.GetComponentsInChildren <RectTransform>().First(x => x.name == "Content").transform.SetParent(viewportMask.rectTransform, false); (_serverHubsTableView.transform as RectTransform).anchorMin = new Vector2(0.3f, 0.5f); (_serverHubsTableView.transform as RectTransform).anchorMax = new Vector2(0.7f, 0.5f); (_serverHubsTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_serverHubsTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, -3f); ReflectionUtil.SetPrivateField(_serverHubsTableView, "_pageUpButton", _pageUpButton); ReflectionUtil.SetPrivateField(_serverHubsTableView, "_pageDownButton", _pageDownButton); _serverHubsTableView.didSelectCellWithIdxEvent += ServerHubs_didSelectRowEvent; _serverHubsTableView.dataSource = this; _serverHubsTableView.ScrollToCellWithIdx(0, TableView.ScrollPositionType.Beginning, false); } } else { _serverHubsTableView.dataSource = this; } }
public static void SetIcon(this LevelListTableCell cell, Sprite icon) { cell.GetPrivateField <UnityEngine.UI.Image>("_coverImage").sprite = icon; }
protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation && type == ActivationType.AddedToHierarchy) { _songTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); _searchButton = this.CreateUIButton("CancelButton", new Vector2(-15f, 36.5f), new Vector2(30f, 6f), () => { SearchPressed?.Invoke(); }, "Search"); _searchButton.SetButtonTextSize(3f); _searchButton.ToggleWordWrapping(false); _sortByButton = this.CreateUIButton("CancelButton", new Vector2(15f, 36.5f), new Vector2(30f, 6f), () => { SelectTopButtons(TopButtonsState.SortBy); }, "Sort By"); _sortByButton.SetButtonTextSize(3f); _sortByButton.ToggleWordWrapping(false); _defButton = this.CreateUIButton("CancelButton", new Vector2(-20f, 36.5f), new Vector2(20f, 6f), () => { SelectTopButtons(TopButtonsState.Select); SortPressed?.Invoke(SortMode.Default); }, "Default"); _defButton.SetButtonTextSize(3f); _defButton.ToggleWordWrapping(false); _defButton.gameObject.SetActive(false); _newButton = this.CreateUIButton("CancelButton", new Vector2(0f, 36.5f), new Vector2(20f, 6f), () => { SelectTopButtons(TopButtonsState.Select); SortPressed?.Invoke(SortMode.Newest); }, "Newest"); _newButton.SetButtonTextSize(3f); _newButton.ToggleWordWrapping(false); _newButton.gameObject.SetActive(false); _diffButton = this.CreateUIButton("CancelButton", new Vector2(20f, 36.5f), new Vector2(20f, 6f), () => { SelectTopButtons(TopButtonsState.Select); SortPressed?.Invoke(SortMode.Difficulty); }, "Difficulty"); _diffButton.SetButtonTextSize(3f); _diffButton.ToggleWordWrapping(false); _diffButton.gameObject.SetActive(false); _fastPageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageUpButton")), rectTransform, false); (_fastPageUpButton.transform as RectTransform).anchorMin = new Vector2(0.5f, 1f); (_fastPageUpButton.transform as RectTransform).anchorMax = new Vector2(0.5f, 1f); (_fastPageUpButton.transform as RectTransform).anchoredPosition = new Vector2(-26f, -6.5f); (_fastPageUpButton.transform as RectTransform).sizeDelta = new Vector2(8f, 6f); _fastPageUpButton.GetComponentsInChildren <RectTransform>().First(x => x.name == "BG").sizeDelta = new Vector2(8f, 6f); _fastPageUpButton.GetComponentsInChildren <Image>().First(x => x.name == "Arrow").sprite = Sprites.doubleArrow; _fastPageUpButton.onClick.AddListener(delegate() { FastScrollUp(_songsTableView, 4); }); _fastPageUpButton.interactable = true; _fastPageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), rectTransform, false); (_fastPageDownButton.transform as RectTransform).anchorMin = new Vector2(0.5f, 0f); (_fastPageDownButton.transform as RectTransform).anchorMax = new Vector2(0.5f, 0f); (_fastPageDownButton.transform as RectTransform).anchoredPosition = new Vector2(-26f, 1f); (_fastPageDownButton.transform as RectTransform).sizeDelta = new Vector2(8f, 6f); _fastPageDownButton.GetComponentsInChildren <RectTransform>().First(x => x.name == "BG").sizeDelta = new Vector2(8f, 6f); _fastPageDownButton.GetComponentsInChildren <Image>().First(x => x.name == "Arrow").sprite = Sprites.doubleArrow; _fastPageDownButton.onClick.AddListener(delegate() { FastScrollDown(_songsTableView, 4); }); _fastPageDownButton.interactable = true; _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(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, -6.5f); (_pageUpButton.transform as RectTransform).sizeDelta = new Vector2(40f, 6f); _pageUpButton.onClick.AddListener(delegate() { _songsTableView.GetPrivateField <TableViewScroller>("_scroller").PageScrollUp(); }); _pageUpButton.interactable = true; _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, 1f); (_pageDownButton.transform as RectTransform).sizeDelta = new Vector2(40f, 6f); _pageDownButton.onClick.AddListener(delegate() { _songsTableView.GetPrivateField <TableViewScroller>("_scroller").PageScrollDown(); }); _pageDownButton.interactable = true; RectTransform container = new GameObject("Container", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.anchorMin = new Vector2(0.3f, 0.5f); container.anchorMax = new Vector2(0.7f, 0.5f); container.sizeDelta = new Vector2(0f, 60f); container.anchoredPosition = new Vector2(0f, -3f); var tableGameObject = new GameObject("CustomTableView"); tableGameObject.SetActive(false); _songsTableView = tableGameObject.AddComponent <TableView>(); _songsTableView.gameObject.AddComponent <RectMask2D>(); _songsTableView.transform.SetParent(container, false); _songsTableView.SetPrivateField("_isInitialized", false); _songsTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); RectTransform viewport = new GameObject("Viewport").AddComponent <RectTransform>(); viewport.SetParent(_songsTableView.transform, false); (viewport.transform as RectTransform).sizeDelta = new Vector2(0f, 0f); (viewport.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (viewport.transform as RectTransform).anchorMax = new Vector2(1f, 1f); _songsTableView.GetComponent <ScrollRect>().viewport = viewport; _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, 0f); (_songsTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f); tableGameObject.SetActive(true); //ReflectionUtil.SetPrivateField(_songsTableView, "_pageUpButton", _pageUpButton); //ReflectionUtil.SetPrivateField(_songsTableView, "_pageDownButton", _pageDownButton); _songsTableView.didSelectCellWithIdxEvent += SongsTableView_DidSelectRow; _songsTableView.dataSource = this; _hostIsSelectingSongText = BeatSaberUI.CreateText(rectTransform, "Host is selecting song...", new Vector2(0f, 0f)); _hostIsSelectingSongText.fontSize = 8f; _hostIsSelectingSongText.alignment = TextAlignmentOptions.Center; _hostIsSelectingSongText.rectTransform.sizeDelta = new Vector2(120f, 6f); SelectTopButtons(TopButtonsState.Select); } else { _songsTableView.ReloadData(); } }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { _timerText = BeatSaberUI.CreateText(rectTransform, "0:30", new Vector2(0f, 35f)); _timerText.alignment = TextAlignmentOptions.Top; _timerText.fontSize = 8f; _nowPlayingText = BeatSaberUI.CreateText(rectTransform, "Now playing:", new Vector2(0f, 15.5f)); _nowPlayingText.alignment = TextAlignmentOptions.Top; _nowPlayingText.fontSize = 6f; _currentSongCell = Instantiate(Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")), rectTransform, false); (_currentSongCell.transform as RectTransform).anchoredPosition = new Vector2(55f, -27f); _currentSongCell.SetPrivateField("_beatmapCharacteristicAlphas", new float[0]); _currentSongCell.SetPrivateField("_beatmapCharacteristicImages", new UnityEngine.UI.Image[0]); _currentSongCell.SetPrivateField("_bought", true); foreach (var icon in _currentSongCell.GetComponentsInChildren <UnityEngine.UI.Image>().Where(x => x.name.StartsWith("LevelTypeIcon"))) { Destroy(icon.gameObject); } _progressBarRect = new GameObject("ProgressBar", typeof(RectTransform)).GetComponent <RectTransform>(); _progressBarRect.SetParent(rectTransform, false); _progressBarRect.anchorMin = new Vector2(0.5f, 0.5f); _progressBarRect.anchorMax = new Vector2(0.5f, 0.5f); _progressBarRect.anchoredPosition = new Vector2(0f, -7.5f); _progressBarRect.sizeDelta = new Vector2(46f, 5f); _progressBackground = new GameObject("Background", typeof(RectTransform), typeof(Image)).GetComponent <Image>(); _progressBackground.rectTransform.SetParent(_progressBarRect, false); _progressBackground.rectTransform.anchorMin = new Vector2(0f, 0f); _progressBackground.rectTransform.anchorMax = new Vector2(1f, 1f); _progressBackground.rectTransform.anchoredPosition = new Vector2(0f, 0f); _progressBackground.rectTransform.sizeDelta = new Vector2(0f, 0f); _progressBackground.sprite = Sprites.whitePixel; _progressBackground.material = Sprites.NoGlowMat; _progressBackground.color = new Color(1f, 1f, 1f, 0.075f); _progressBarImage = new GameObject("Background", typeof(RectTransform), typeof(Image)).GetComponent <Image>(); _progressBarImage.rectTransform.SetParent(_progressBarRect, false); _progressBarImage.rectTransform.anchorMin = new Vector2(0f, 0f); _progressBarImage.rectTransform.anchorMax = new Vector2(1f, 1f); _progressBarImage.rectTransform.anchoredPosition = new Vector2(0f, 0f); _progressBarImage.rectTransform.sizeDelta = new Vector2(0f, 0f); _progressBarImage.sprite = Sprites.whitePixel; _progressBarImage.material = Sprites.NoGlowMat; _progressBarImage.type = Image.Type.Filled; _progressBarImage.fillMethod = Image.FillMethod.Horizontal; _progressBarImage.fillAmount = 0.5f; _progressText = BeatSaberUI.CreateText(rectTransform, "0.0%", new Vector2(55f, -10f)); _progressText.rectTransform.SetParent(_progressBarRect, true); _progressBarRect.gameObject.SetActive(false); _playNowButton = BeatSaberUI.CreateUIButton(rectTransform, "QuitButton", new Vector2(-25.5f, -25f), new Vector2(28f, 8.8f), () => { playPressedEvent?.Invoke(); }, "Play now"); _playNowButton.ToggleWordWrapping(false); _waitText = BeatSaberUI.CreateText(rectTransform, " or wait for the next song!", new Vector2(14f, -21f)); _waitText.alignment = TextAlignmentOptions.Top; _waitText.fontSize = 6f; _waitText.rectTransform.sizeDelta = new Vector2(0f, 0f); _waitText.overflowMode = TextOverflowModes.Overflow; _waitText.enableWordWrapping = false; } _progressBarRect.gameObject.SetActive(false); }
protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation) { if (!SongCore.Loader.AreSongsLoaded) { SongCore.Loader.SongsLoadedEvent += SongLoader_SongsLoadedEvent; } // get table cell instance _requestListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First((LevelListTableCell x) => x.name == "LevelListTableCell"); // initialize Yes/No modal YesNoModal.instance.Setup(); _songPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault(); RectTransform container = new GameObject("RequestBotContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.sizeDelta = new Vector2(60f, 0f); #region TableView Setup and Initialization var go = new GameObject("SongRequestTableView", typeof(RectTransform)); go.SetActive(false); _songListTableView = go.AddComponent <TableView>(); _songListTableView.gameObject.AddComponent <RectMask2D>(); _songListTableView.transform.SetParent(container, false); _songListTableView.SetField("_preallocatedCells", new TableView.CellsGroup[0]); _songListTableView.SetField("_isInitialized", false); var viewport = new GameObject("Viewport").AddComponent <RectTransform>(); viewport.SetParent(go.GetComponent <RectTransform>(), false); (viewport.transform as RectTransform).sizeDelta = new Vector2(0, 0); (viewport.transform as RectTransform).anchorMin = new Vector2(0, 0); (viewport.transform as RectTransform).anchorMax = new Vector2(1, 1); go.GetComponent <ScrollRect>().viewport = viewport; _songListTableView.InvokeMethod <object, TableView>("Init"); _songListTableView.dataSource = this; go.SetActive(true); (_songListTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (_songListTableView.transform as RectTransform).anchorMax = new Vector2(1f, 1f); (_songListTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_songListTableView.transform as RectTransform).anchoredPosition = new Vector2(0f, -3f); _songListTableView.didSelectCellWithIdxEvent += DidSelectRow; 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); var _songListTableViewScroller = _songListTableView.GetField <TableViewScroller, TableView>("_scroller"); _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageUpButton")), container, false); (_pageUpButton.transform as RectTransform).anchoredPosition = new Vector2(0f, 35f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _songListTableViewScroller.PageScrollUp(); }); _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), container, false); (_pageDownButton.transform as RectTransform).anchoredPosition = new Vector2(0f, -41f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _songListTableViewScroller.PageScrollDown(); }); #endregion CenterKeys = new KEYBOARD(container, "", false, -15, 15); #if UNRELEASED // BUG: Need additional modes disabling one shot buttons // BUG: Need to make sure the buttons are usable on older headsets _CurrentSongName = BeatSaberUI.CreateText(container, "", new Vector2(-35, 37f)); _CurrentSongName.fontSize = 3f; _CurrentSongName.color = Color.cyan; _CurrentSongName.alignment = TextAlignmentOptions.Left; _CurrentSongName.enableWordWrapping = false; _CurrentSongName.text = ""; _CurrentSongName2 = BeatSaberUI.CreateText(container, "", new Vector2(-35, 34f)); _CurrentSongName2.fontSize = 3f; _CurrentSongName2.color = Color.cyan; _CurrentSongName2.alignment = TextAlignmentOptions.Left; _CurrentSongName2.enableWordWrapping = false; _CurrentSongName2.text = ""; //CenterKeys.AddKeys(SONGLISTKEY); if (!RequestBot.AddKeyboard(CenterKeys, "mainpanel.kbd")) { CenterKeys.AddKeys(SONGLISTKEY); } ColorDeckButtons(CenterKeys, Color.white, Color.magenta); #endif RequestBot.AddKeyboard(CenterKeys, "CenterPanel.kbd"); CenterKeys.DefaultActions(); #region History button // History button _historyButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(o => (o.name == "OkButton")), container, false); _historyButton.ToggleWordWrapping(false); (_historyButton.transform as RectTransform).anchoredPosition = new Vector2(90f, 30f); _historyButton.SetButtonText("History"); _historyButton.onClick.RemoveAllListeners(); _historyButton.onClick.AddListener(delegate() { isShowingHistory = !isShowingHistory; RequestBot.SetTitle(isShowingHistory ? "Song Request History" : "Song Request Queue"); UpdateRequestUI(true); SetUIInteractivity(); _lastSelection = -1; }); _historyHintText = UIHelper.AddHintText(_historyButton.transform as RectTransform, ""); #endregion #region Blacklist button // Blacklist button _blacklistButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(o => (o.name == "OkButton")), container, false); _blacklistButton.ToggleWordWrapping(false); (_blacklistButton.transform as RectTransform).anchoredPosition = new Vector2(90f, 10f); _blacklistButton.SetButtonText("Blacklist"); //_blacklistButton.GetComponentInChildren<Image>().color = Color.red; _blacklistButton.onClick.RemoveAllListeners(); _blacklistButton.onClick.AddListener(delegate() { if (NumberOfCells() > 0) { void _onConfirm() { RequestBot.Blacklist(_selectedRow, isShowingHistory, true); if (_selectedRow > 0) { _selectedRow--; } confirmDialogActive = false; } // get song var song = SongInfoForRow(_selectedRow).song; // indicate dialog is active confirmDialogActive = true; // show dialog YesNoModal.instance.ShowDialog("Blacklist Song Warning", $"Blacklisting {song["songName"].Value} by {song["authorName"].Value}\r\nDo you want to continue?", _onConfirm, () => { confirmDialogActive = false; }); } }); UIHelper.AddHintText(_blacklistButton.transform as RectTransform, "Block the selected request from being queued in the future."); #endregion #region Skip button // Skip button _skipButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(o => (o.name == "OkButton")), container, false); _skipButton.ToggleWordWrapping(false); (_skipButton.transform as RectTransform).anchoredPosition = new Vector2(90f, 0f); _skipButton.SetButtonText("Skip"); //_skipButton.GetComponentInChildren<Image>().color = Color.yellow; _skipButton.onClick.RemoveAllListeners(); _skipButton.onClick.AddListener(delegate() { if (NumberOfCells() > 0) { void _onConfirm() { // get selected song currentsong = SongInfoForRow(_selectedRow); // skip it RequestBot.Skip(_selectedRow); // select previous song if not first song if (_selectedRow > 0) { _selectedRow--; } // indicate dialog is no longer active confirmDialogActive = false; } // get song var song = SongInfoForRow(_selectedRow).song; // indicate dialog is active confirmDialogActive = true; // show dialog YesNoModal.instance.ShowDialog("Skip Song Warning", $"Skipping {song["songName"].Value} by {song["authorName"].Value}\r\nDo you want to continue?", _onConfirm, () => { confirmDialogActive = false; }); } }); UIHelper.AddHintText(_skipButton.transform as RectTransform, "Remove the selected request from the queue."); #endregion #region Play button // Play button _playButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(o => (o.name == "OkButton")), container, false); _playButton.ToggleWordWrapping(false); (_playButton.transform as RectTransform).anchoredPosition = new Vector2(90f, -10f); _playButton.SetButtonText("Play"); _playButton.GetComponentInChildren <Image>().color = Color.green; _playButton.onClick.RemoveAllListeners(); _playButton.onClick.AddListener(delegate() { if (NumberOfCells() > 0) { currentsong = SongInfoForRow(_selectedRow); RequestBot.played.Add(currentsong.song); RequestBot.WriteJSON(RequestBot.playedfilename, ref RequestBot.played); SetUIInteractivity(false); RequestBot.Process(_selectedRow, isShowingHistory); _selectedRow = -1; } }); UIHelper.AddHintText(_playButton.transform as RectTransform, "Download and scroll to the currently selected request."); #endregion #region Queue button // Queue button _queueButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(o => (o.name == "OkButton")), container, false); _queueButton.ToggleWordWrapping(false); _queueButton.SetButtonTextSize(3.5f); (_queueButton.transform as RectTransform).anchoredPosition = new Vector2(90f, -30f); _queueButton.SetButtonText(RequestBotConfig.Instance.RequestQueueOpen ? "Queue Open" : "Queue Closed"); _queueButton.GetComponentInChildren <Image>().color = RequestBotConfig.Instance.RequestQueueOpen ? Color.green : Color.red;; _queueButton.interactable = true; _queueButton.onClick.RemoveAllListeners(); _queueButton.onClick.AddListener(delegate() { RequestBotConfig.Instance.RequestQueueOpen = !RequestBotConfig.Instance.RequestQueueOpen; RequestBotConfig.Instance.Save(); RequestBot.WriteQueueStatusToFile(RequestBotConfig.Instance.RequestQueueOpen ? "Queue is open." : "Queue is closed."); RequestBot.Instance.QueueChatMessage(RequestBotConfig.Instance.RequestQueueOpen ? "Queue is open." : "Queue is closed."); UpdateRequestUI(); }); UIHelper.AddHintText(_queueButton.transform as RectTransform, "Open/Close the queue."); #endregion // Set default RequestFlowCoordinator title RequestBot.SetTitle(isShowingHistory ? "Song Request History" : "Song Request Queue"); } base.DidActivate(firstActivation, type); UpdateRequestUI(); SetUIInteractivity(true); }
protected override void DidActivate(bool firstActivation, ActivationType type) { try { if (firstActivation) { _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); var newGameObj = new GameObject("CustomListTableView"); // Disable the new gameobject containing the tableview to avoid HMUI.Init error spam in the output_log newGameObj.SetActive(false); _customListTableView = newGameObj.AddComponent <TableView>(); _customListTableView.gameObject.AddComponent <RectMask2D>(); _customListTableView.transform.SetParent(container, false); (_customListTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (_customListTableView.transform as RectTransform).anchorMax = new Vector2(1f, 1f); (_customListTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 60f); (_customListTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f); _customListTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); _customListTableView.SetPrivateField("_isInitialized", false); _customListTableView.dataSource = this; newGameObj.SetActive(true); _customListTableView.didSelectCellWithIdxEvent += _customListTableView_didSelectRowEvent; if (includePageButtons) { if (_pageUpButton == null) { _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageUpButton")), container, false); (_pageUpButton.transform as RectTransform).anchoredPosition = new Vector2(0f, 30f); _pageUpButton.interactable = true; _pageUpButton.onClick.AddListener(delegate() { _customListTableView.PageScrollUp(); }); } if (_pageDownButton == null) { _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageDownButton")), container, false); (_pageDownButton.transform as RectTransform).anchoredPosition = new Vector2(0f, -30f); _pageDownButton.interactable = true; _pageDownButton.onClick.AddListener(delegate() { _customListTableView.PageScrollDown(); }); } } } base.DidActivate(firstActivation, type); } catch (Exception e) { Plugin.Log(e.ToString(), IPA.Logging.Logger.Level.Error); } }
private async void SetDataFromLevelAsync(SongRequest request, LevelListTableCell _tableCell, int row) { var favouritesBadge = _tableCell.GetField <RawImage, LevelListTableCell>("_favoritesBadgeImage"); favouritesBadge.enabled = false; bool highlight = (request.requestInfo.Length > 0) && (request.requestInfo[0] == '!'); string msg = highlight ? "MSG" : ""; var hasMessage = (request.requestInfo.Length > 0) && (request.requestInfo[0] == '!'); var isChallenge = request.requestInfo.IndexOf("!challenge", StringComparison.OrdinalIgnoreCase) >= 0; var beatmapCharacteristicImages = _tableCell.GetField <UnityEngine.UI.Image[], LevelListTableCell>("_beatmapCharacteristicImages"); // NEW VERSION foreach (var i in beatmapCharacteristicImages) { i.enabled = false; } // causing a nullex? //_tableCell.SetField("_beatmapCharacteristicAlphas", new float[5] { 1f, 1f, 1f, 1f, 1f }); // set message icon if request has a message // NEW VERSION if (hasMessage) { beatmapCharacteristicImages.Last().sprite = Base64Sprites.InfoIcon; beatmapCharacteristicImages.Last().enabled = true; } // set challenge icon if song is a challenge if (isChallenge) { var el = beatmapCharacteristicImages.ElementAt(beatmapCharacteristicImages.Length - 2); el.sprite = Base64Sprites.VersusChallengeIcon; el.enabled = true; } string pp = ""; int ppvalue = request.song["pp"].AsInt; if (ppvalue > 0) { pp = $" {ppvalue} PP"; } var dt = new RequestBot.DynamicText().AddSong(request.song).AddUser(ref request.requestor); // Get basic fields dt.Add("Status", request.status.ToString()); dt.Add("Info", (request.requestInfo != "") ? " / " + request.requestInfo : ""); dt.Add("RequestTime", request.requestTime.ToLocalTime().ToString("hh:mm")); var songName = _tableCell.GetField <TextMeshProUGUI, LevelListTableCell>("_songNameText"); //songName.text = $"{request.song["songName"].Value} <size=50%>{RequestBot.GetRating(ref request.song)} <color=#3fff3f>{pp}</color></size> <color=#ff00ff>{msg}</color>"; songName.text = $"{request.song["songName"].Value} <size=50%>{RequestBot.GetRating(ref request.song)} <color=#3fff3f>{pp}</color></size>"; // NEW VERSION var author = _tableCell.GetField <TextMeshProUGUI, LevelListTableCell>("_authorText"); author.text = dt.Parse(RequestBot.QueueListRow2); var image = _tableCell.GetField <RawImage, LevelListTableCell>("_coverRawImage"); var imageSet = false; if (SongCore.Loader.AreSongsLoaded) { CustomPreviewBeatmapLevel level = CustomLevelForRow(row); if (level != null) { //Plugin.Log("custom level found"); // set image from song's cover image var tex = await level.GetCoverImageTexture2DAsync(System.Threading.CancellationToken.None); image.texture = tex; imageSet = true; } } if (!imageSet) { string url = request.song["coverURL"].Value; if (!_cachedTextures.TryGetValue(url, out var tex)) { var b = await Plugin.WebClient.DownloadImage($"https://beatsaver.com{url}", System.Threading.CancellationToken.None); tex = new Texture2D(2, 2); tex.LoadImage(b); try { _cachedTextures.Add(url, tex); } catch (Exception) { } } image.texture = tex; } UIHelper.AddHintText(_tableCell.transform as RectTransform, dt.Parse(RequestBot.SongHintText)); }
protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation && type == ActivationType.AddedToHierarchy) { _serverTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); _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() { _serverTableView.PageScrollUp(); }); _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() { _serverTableView.PageScrollDown(); }); _pageDownButton.interactable = false; _createRoom = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton"); _createRoom.SetButtonText("Create room"); _createRoom.SetButtonTextSize(3f); (_createRoom.transform as RectTransform).sizeDelta = new Vector2(38f, 6f); (_createRoom.transform as RectTransform).anchoredPosition = new Vector2(0f, 36f); _createRoom.onClick.RemoveAllListeners(); _createRoom.onClick.AddListener(delegate() { createRoomButtonPressed?.Invoke(); }); RectTransform container = new GameObject("Content", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.anchorMin = new Vector2(0.3f, 0.5f); container.anchorMax = new Vector2(0.7f, 0.5f); container.sizeDelta = new Vector2(0f, 60f); container.anchoredPosition = new Vector2(0f, -3f); _serverTableView = new GameObject("CustomTableView").AddComponent <TableView>(); _serverTableView.gameObject.AddComponent <RectMask2D>(); _serverTableView.transform.SetParent(container, false); _serverTableView.SetPrivateField("_isInitialized", false); _serverTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]); _serverTableView.Init(); (_serverTableView.transform as RectTransform).anchorMin = new Vector2(0f, 0f); (_serverTableView.transform as RectTransform).anchorMax = new Vector2(1f, 1f); (_serverTableView.transform as RectTransform).sizeDelta = new Vector2(0f, 0f); (_serverTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f); ReflectionUtil.SetPrivateField(_serverTableView, "_pageUpButton", _pageUpButton); ReflectionUtil.SetPrivateField(_serverTableView, "_pageDownButton", _pageDownButton); _serverTableView.didSelectRowEvent += ServerTableView_DidSelectRow; _serverTableView.dataSource = this; } else { _serverTableView.ReloadData(); } }
protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation) { if (!SongLoader.AreSongsLoaded) { SongLoader.SongsLoadedEvent += SongLoader_SongsLoadedEvent; } InitConfirmationDialog(); _songListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")); _songPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault(); DidSelectRowEvent += DidSelectRow; RequestBot.SongRequestQueued += (song) => RefreshTable(); RequestBot.SongRequestDequeued += (song) => RefreshTable(); RectTransform container = new GameObject("CustomListContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.sizeDelta = new Vector2(60f, 0f); // Blacklist button _blacklistButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "QuitButton")), container, false); _blacklistButton.ToggleWordWrapping(false); (_blacklistButton.transform as RectTransform).anchoredPosition = new Vector2(90f, 10f); _blacklistButton.SetButtonText("Blacklist"); //_blacklistButton.GetComponentInChildren<Image>().color = Color.red; _blacklistButton.onClick.RemoveAllListeners(); _blacklistButton.onClick.AddListener(delegate() { _onConfirm = () => { RequestBot.Blacklist(_selectedRow); }; var song = RequestBot.FinalRequestQueue[_selectedRow].song; _warningTitle.text = "Blacklist Song Warning"; _warningMessage.text = $"Blacklisting {song["songName"].Value} by {song["authorName"].Value}\r\nDo you want to continue?"; _confirmationDialog.Present(); }); BeatSaberUI.AddHintText(_blacklistButton.transform as RectTransform, "Block the selected request from being queued in the future."); // Skip button _skipButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "QuitButton")), container, false); _skipButton.ToggleWordWrapping(false); (_skipButton.transform as RectTransform).anchoredPosition = new Vector2(90f, 0f); _skipButton.SetButtonText("Skip"); //_skipButton.GetComponentInChildren<Image>().color = Color.yellow; _skipButton.onClick.RemoveAllListeners(); _skipButton.onClick.AddListener(delegate() { _onConfirm = () => { _lastSelection = -1; RequestBot.Skip(_selectedRow); }; var song = RequestBot.FinalRequestQueue[_selectedRow].song; _warningTitle.text = "Skip Song Warning"; _warningMessage.text = $"Skipping {song["songName"].Value} by {song["authorName"].Value}\r\nDo you want to continue?"; _confirmationDialog.Present(); }); BeatSaberUI.AddHintText(_skipButton.transform as RectTransform, "Remove the selected request from the queue."); // Play button _playButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "QuitButton")), container, false); _playButton.ToggleWordWrapping(false); (_playButton.transform as RectTransform).anchoredPosition = new Vector2(90f, -10f); _playButton.SetButtonText("Play"); _playButton.GetComponentInChildren <Image>().color = Color.green; _playButton.onClick.RemoveAllListeners(); _playButton.onClick.AddListener(delegate() { SetUIInteractivity(false); RequestBot.Process(_selectedRow); }); BeatSaberUI.AddHintText(_playButton.transform as RectTransform, "Download and scroll to the currently selected request."); } base.DidActivate(firstActivation, type); RefreshTable(); SetUIInteractivity(true); }