protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { BSMLParser.instance.Parse(BSMLUtilities.GetResourceContent(Assembly.GetExecutingAssembly(), "EnhancedSearchAndFilters.UI.Views.SearchResultsNavigationView.bsml"), this.gameObject, this); name = "SearchResultsNavigationController"; _loadingSpinner = UIUtilities.CreateLoadingSpinner(this.rectTransform); var handler = _lastSearchButton.gameObject.AddComponent <EnterExitEventHandler>(); handler.PointerEntered += () => _lastSearchButton.SetButtonText(RedoSearchButtonHighlightedText); handler.PointerExited += () => _lastSearchButton.SetButtonText(RedoSearchButtonDefaultText); _lastSearchText.color = new Color(1f, 1f, 1f, 0.3f); _songPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First(); } else { _resultsText.text = PluginConfig.SearchKeyboard == SearchKeyboardType.RightScreen ? RightScreenKeyboardPlaceholderResultsText : DetachedKeyboardPlaceholderResultsText; _resultsText.fontSize = 6f; } AdjustElements(); _loadingSpinner.SetActive(false); _resultsText.gameObject.SetActive(PluginConfig.SearchKeyboard != SearchKeyboardType.Compact); _forceButton.gameObject.SetActive(false); _lastSearchButton.gameObject.SetActive(false); _lastSearchText.gameObject.SetActive(false); _resetKeyboardPosButton.gameObject.SetActive(PluginConfig.SearchKeyboard == SearchKeyboardType.Floating); SetHeaderActive(PluginConfig.SearchKeyboard != SearchKeyboardType.Compact); }
static bool Prefix(SongPreviewPlayer __instance, AudioClip audioClip) { var defaultClip = __instance.GetField <AudioClip, SongPreviewPlayer>("_defaultAudioClip"); __instance.volume = audioClip == defaultClip ? 0 : 1; return(true); }
static bool Prefix(SongPreviewPlayer __instance, AudioClip audioClip, float startTime, float duration, float volumeScale = 1f) { // Check if this is the default audio clip, and if it is, use the Menu BG Music Volume, otherwise use the preview volume. var defaultClip = ReflectionUtil.GetPrivateField <AudioClip>(__instance, "_defaultAudioClip"); if (audioClip == defaultClip) { __instance.volume = Settings.MenuBGVolume; Plugin.Log("Setting SongPreviewPlayer volume to MenuBGVolume : " + __instance.volume, Plugin.LogLevel.DebugOnly); } else { // Don't crossfade if the preview volume is set to 0 if (Settings.PreviewVolume == 0) { return(false); } __instance.volume = Settings.PreviewVolume; Plugin.Log("Setting SongPreviewPlayer volume to PreviewVolume : " + __instance.volume, Plugin.LogLevel.DebugOnly); } // Return true to run the original method as well return(true); }
static bool Prefix(SongPreviewPlayer __instance, AudioClip audioClip, float startTime, float duration, float volumeScale = 1f) { // Check if this is the default audio clip, and if it is, use the Menu BG Music Volume, otherwise use the preview volume. var defaultClip = ReflectionUtil.GetPrivateField <AudioClip>(__instance, "_defaultAudioClip"); var resultsViewController = Resources.FindObjectsOfTypeAll <ResultsViewController>().FirstOrDefault(); AudioClip levelClearedClip = null; if (resultsViewController != null) { levelClearedClip = ReflectionUtil.GetPrivateField <AudioClip>(resultsViewController, "_levelClearedAudioClip"); } if (audioClip == defaultClip) { __instance.volume = Settings.MenuBGVolume; Plugin.Log("Setting SongPreviewPlayer volume to MenuBGVolume : " + __instance.volume, Plugin.LogLevel.DebugOnly); } else if (audioClip == levelClearedClip) { __instance.volume = Settings.SongFinishFanfareVolume; } else { // Don't crossfade if the preview volume is set to 0 if (Settings.PreviewVolume == 0) { return(false); } __instance.volume = Settings.PreviewVolume; Plugin.Log("Setting SongPreviewPlayer volume to PreviewVolume : " + __instance.volume, Plugin.LogLevel.DebugOnly); } // Return true to run the original method as well return(true); }
IEnumerator IEInstantiateAudioSource() { yield return(new WaitUntil(() => Resources.FindObjectsOfTypeAll <MainSettingsModelSO>().Any())); MainSettingsModelSO mainSettings = Resources.FindObjectsOfTypeAll <MainSettingsModelSO>().FirstOrDefault(); _maxPreviewVolume = mainSettings.volume * 0.5f; yield return(new WaitUntil(() => Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().Any())); _songPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault(); _songPreviewPlayer.FadeOut(1); yield return(new WaitUntil(() => Resources.FindObjectsOfTypeAll <BeatmapLevelsModel>().Any())); BeatmapLevelsModel levelsModel = Resources.FindObjectsOfTypeAll <BeatmapLevelsModel>().FirstOrDefault(); BeatmapLevelPackCollectionSO packCollectionSO = levelsModel.ostAndExtrasPackCollection; BeatmapLevelPackSO[] levelPack = packCollectionSO.GetField <BeatmapLevelPackSO[]>("_beatmapLevelPacks"); BeatmapLevelCollectionSO levelCollectionSO = levelPack[5].GetField <BeatmapLevelCollectionSO>("_beatmapLevelCollection"); BeatmapLevelSO[] levels = levelCollectionSO.GetField <BeatmapLevelSO[]>("_beatmapLevels"); AudioClip clip = levels[1].GetField <AudioClip>("_audioClip"); _audioSource = new GameObject("SSAudSource").AddComponent <AudioSource>(); _audioSource.clip = clip; _audioSource.spatialBlend = 0; _audioSource.loop = true; _audioSource.volume = 0; _audioSource.time = 20f; _audioSource.Play(); }
private void ListViewBackPressed() { DismissViewController(_videoListViewController); SongPreviewPlayer preview = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First(); preview.FadeOut(); }
public void Init() { _mainFlowCoordinator = Resources.FindObjectsOfTypeAll <MainFlowCoordinator>().FirstOrDefault(); _mainFlowCoordinator.GetPrivateField <MainMenuViewController>("_mainMenuViewController").didFinishEvent += SongListTweaks_didFinishEvent; BSEvents.levelSelected += HandleDidSelectLevel; YouTubeDownloader.Instance.downloadProgress += VideoDownloaderDownloadProgress; songPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First(); }
IEnumerator SetVolume() { SongPreviewPlayer _previewPlayer = null; yield return(new WaitUntil(() => _previewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault())); _previewPlayer.volume = MenuMusicVolume; }
public ResultsSoundManager(Config config, SiraLog siraLog, SongPreviewPlayer songPreviewPlayer, CachedMediaAsyncLoader cachedMediaAsyncLoader) { _config = config; _siraLog = siraLog; _random = new Random(); _songPreviewPlayer = songPreviewPlayer; _audioClipAsyncLoader = cachedMediaAsyncLoader; }
//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /// <summary> /// Init /// </summary> internal void Init() { /// Find preview player m_SongPreviewPlayer = UnityEngine.Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault(); /// Bind event TableViewInstance.didSelectCellWithIdxEvent -= DidSelectCellWithIdxEvent; TableViewInstance.didSelectCellWithIdxEvent += DidSelectCellWithIdxEvent; }
private void SceneLoaded(Scene arg0, LoadSceneMode arg1) { if (arg0.name == "Menu") { if (!_previewPlayer == Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First()) { _previewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First(); StartCoroutine(LoadAudioClip()); } } }
IEnumerator ClickTheCircles() { SongPreviewPlayer previewPlayer = null; yield return(new WaitUntil(() => previewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault())); yield return(new WaitForSeconds(1)); if (previewPlayer) { previewPlayer.CrossfadeTo(circlesClip, 1, circlesClip.length); } }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { BeatSaberUI.CreateBackButton(this.rectTransform, () => BackButtonPressed?.Invoke()); _loadingSpinner = BeatSaberUI.CreateLoadingSpinner(this.rectTransform); var headerRectTransform = Instantiate(Resources.FindObjectsOfTypeAll <RectTransform>() .First(x => x.name == "HeaderPanel" && x.parent.name == "PlayerSettingsViewController"), this.rectTransform); _header = headerRectTransform.gameObject; _resultsText = BeatSaberUI.CreateText(this.rectTransform, _placeholderResultsText, Vector2.zero, Vector2.zero); _resultsText.alignment = TextAlignmentOptions.Center; _resultsText.enableWordWrapping = true; _forceButton = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", new Vector2(59f, -32f), new Vector2(36f, 10f), () => ForceShowButtonPressed?.Invoke(), "Force Show Results"); _lastSearchButton = BeatSaberUI.CreateUIButton(this.rectTransform, "CancelButton", new Vector2(59f, -32f), new Vector2(36f, 10f), () => LastSearchButtonPressed?.Invoke(), "<color=#FFFFCC>Redo Last Search</color>"); (_lastSearchButton as HMUI.NoTransitionsButton).selectionStateDidChangeEvent += delegate(HMUI.NoTransitionsButton.SelectionState selectionState) { var text = _lastSearchButton.GetComponentInChildren <TextMeshProUGUI>(); if (selectionState == HMUI.NoTransitionsButton.SelectionState.Highlighted) { text.text = "<color=#444400>Redo Last Search</color>"; } else { text.text = "<color=#FFFFCC>Redo Last Search</color>"; } }; _lastSearchText = BeatSaberUI.CreateText(this.rectTransform, "", new Vector2(23f, -31.5f), new Vector2(30f, 8f)); _lastSearchText.fontSize = 3.5f; _lastSearchText.color = new Color(1f, 1f, 1f, 0.3f); _lastSearchText.alignment = TextAlignmentOptions.TopRight; _songPreviewPlayer = Instantiate(Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First()); } else { _resultsText.text = _placeholderResultsText; _resultsText.fontSize = 6f; } AdjustElements(); _loadingSpinner.SetActive(false); _resultsText.gameObject.SetActive(!PluginConfig.CompactSearchMode); _forceButton.gameObject.SetActive(false); _lastSearchButton.gameObject.SetActive(false); _lastSearchText.gameObject.SetActive(false); SetHeaderActive(!PluginConfig.CompactSearchMode); }
private void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { if (scene.buildIndex == 1) { player = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault(); if (normalVolume == 0) { normalVolume = ReflectionUtil.GetPrivateField <float>(player, "_ambientVolumeScale"); } UpdateBGVolume(); } else { player = null; } }
internal void Setup() { YouTubeDownloader.Instance.downloadProgress += VideoDownloaderDownloadProgress; BSEvents.levelSelected += HandleDidSelectLevel; BSEvents.gameSceneLoaded += GameSceneLoaded; songPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First(); videoDetailsViewRect.gameObject.SetActive(true); videoSearchResultsViewRect.gameObject.SetActive(false); statusViewer = root.AddComponent <VideoMenuStatus>(); statusViewer.DidEnable += StatusViewerDidEnable; statusViewer.DidDisable += StatusViewerDidDisable; Resources.FindObjectsOfTypeAll <MissionSelectionMapViewController>().FirstOrDefault().didActivateEvent += MissionSelectionDidActivate; }
public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { if (isMenuScene(scene)) { flowController = Resources.FindObjectsOfTypeAll <StandardLevelSelectionFlowCoordinator>().FirstOrDefault(); navController = flowController.GetPrivateField <StandardLevelSelectionNavigationController>("_levelSelectionNavigationController"); listViewController = flowController.GetPrivateField <StandardLevelListViewController>("_levelListViewController"); difficultyViewController = flowController.GetPrivateField <StandardLevelDifficultyViewController>("_levelDifficultyViewController"); listTableView = listViewController.GetPrivateField <StandardLevelListTableView>("_levelListTableView"); tableView = listTableView.GetPrivateField <TableView>("_tableView"); detailViewController = flowController.GetPrivateField <StandardLevelDetailViewController>("_levelDetailViewController"); player = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault(); FixDiffOrder(); CreatUI(); CreateRandomButton(); } else { isShowing = false; } }
private void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene) { try { if (SettingsUI.isMenuScene(scene)) { player = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault(); if (normalVolume == 0) { normalVolume = ReflectionUtil.GetPrivateField <float>(player, "_ambientVolumeScale"); } UpdateBGVolume(); } else { player = null; } } catch (Exception e) { Console.WriteLine("Tweaks (MenuMusic) done f****d up: " + e); } }
static bool Prefix(MissionNodeVisualController missionNodeVisualController, MissionSelectionMapViewController __instance, SongPreviewPlayer ____songPreviewPlayer) { if (missionNodeVisualController.missionNode.missionData is CustomMissionDataSO) { __instance.SetPrivateField("_selectedMissionNode", missionNodeVisualController.missionNode); CustomPreviewBeatmapLevel level = (missionNodeVisualController.missionNode.missionData as CustomMissionDataSO).customLevel; if (level != null) { ____songPreviewPlayer.CrossfadeTo(level.GetPreviewAudioClipAsync(CancellationToken.None).Result, level.previewStartTime, level.previewDuration); } __instance.GetPrivateField <Action <MissionSelectionMapViewController, MissionNode> >("didSelectMissionLevelEvent")(__instance, missionNodeVisualController.missionNode); return(false); } return(true); }
public void Constractor(SongListUtility util, CustomMenuMusic customMenuMusic, SongPreviewPlayer player) { this.songListUtility = util; this._customMenuMusic = customMenuMusic; this._songPreviewPlayer = player; }
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() { ui = BSMultiplayerUI._instance; _songLoader = FindObjectOfType <SongLoader>(); localPlayerInfo = new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID()); if (_songPreviewPlayer == null) { ObjectProvider[] providers = Resources.FindObjectsOfTypeAll <ObjectProvider>().Where(x => x.name == "SongPreviewPlayerProvider").ToArray(); if (providers.Length > 0) { _songPreviewPlayer = providers[0].GetProvidedObject <SongPreviewPlayer>(); } } if (_backButton == null) { _backButton = ui.CreateBackButton(rectTransform); _backButton.onClick.AddListener(delegate() { BSMultiplayerClient._instance.DataReceived -= DataReceived; BSMultiplayerClient._instance.DisconnectFromServer(); _songPreviewPlayer.CrossfadeToDefault(); try { transform.parent.GetComponent <MultiplayerServerHubViewController>().UpdatePage(); } catch (Exception e) { Console.WriteLine($"ServerHub exception: {e}"); } foreach (AvatarController avatar in _avatars) { Destroy(avatar.gameObject); } DismissModalViewController(null, false); }); } if (_timerText == null) { _timerText = ui.CreateText(rectTransform, "", new Vector2(0f, -5f)); _timerText.fontSize = 8f; _timerText.alignment = TextAlignmentOptions.Center; _timerText.rectTransform.sizeDelta = new Vector2(20f, 6f); } if (_selectText == null) { _selectText = ui.CreateText(rectTransform, "", new Vector2(0f, -36f)); _selectText.fontSize = 7f; _selectText.alignment = TextAlignmentOptions.Center; _selectText.rectTransform.sizeDelta = new Vector2(120f, 6f); } if (_loadingIndicator == null) { try { _loadingIndicator = ui.CreateLoadingIndicator(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); } catch (Exception e) { Console.WriteLine("EXCEPTION: " + e); } } if (_selectedSongCell == null) { _selectedSongCell = Instantiate(Resources.FindObjectsOfTypeAll <SongListTableCell>().First(x => x.name == "SongListTableCell"), 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, 0); _selectedSongCell.gameObject.SetActive(false); } else { _selectedSongCell.gameObject.SetActive(false); } if (_multiplayerLeaderboard == null) { _multiplayerLeaderboard = ui.CreateViewController <MultiplayerLeaderboardViewController>(); _multiplayerLeaderboard.rectTransform.anchorMin = new Vector2(0.3f, 0f); _multiplayerLeaderboard.rectTransform.anchorMax = new Vector2(0.7f, 1f); PushViewController(_multiplayerLeaderboard, true); } else { if (_viewControllers.IndexOf(_multiplayerLeaderboard) < 0) { PushViewController(_multiplayerLeaderboard, true); } } Console.WriteLine($"Connecting to {selectedServerIP}:{selectedServerPort}"); if (BSMultiplayerClient._instance.ConnectToServer(selectedServerIP, selectedServerPort)) { BSMultiplayerClient._instance.SendString(JsonUtility.ToJson(new ClientCommand(ClientCommandType.GetServerState))); BSMultiplayerClient._instance.SendString(JsonUtility.ToJson(new ClientCommand(ClientCommandType.GetAvailableSongs))); StartCoroutine(BSMultiplayerClient._instance.ReceiveFromServerCoroutine()); BSMultiplayerClient._instance.DataReceived += DataReceived; } else { _loading = false; TextMeshProUGUI _errorText = ui.CreateText(rectTransform, String.Format("Can't connect to server!"), new Vector2(0f, -48f)); _errorText.alignment = TextAlignmentOptions.Center; Destroy(_errorText.gameObject, 5f); } }
protected override void DidActivate() { ui = BeatSaverUI._instance; _songLoader = FindObjectOfType <SongLoader>(); UpdateAlreadyDownloadedSongs(); if (_songPreviewPlayer == null) { ObjectProvider[] providers = Resources.FindObjectsOfTypeAll <ObjectProvider>().Where(x => x.name == "SongPreviewPlayerProvider").ToArray(); if (providers.Length > 0) { _songPreviewPlayer = providers[0].GetProvidedObject <SongPreviewPlayer>(); } } if (_songListViewController == null) { _songListViewController = ui.CreateViewController <BeatSaverSongListViewController>(); _songListViewController.rectTransform.anchorMin = new Vector2(0.3f, 0f); _songListViewController.rectTransform.anchorMax = new Vector2(0.7f, 1f); PushViewController(_songListViewController, true); } else { if (_viewControllers.IndexOf(_songListViewController) < 0) { PushViewController(_songListViewController, true); } } _songListViewController.SelectTopButtons(TopButtonsState.Select); if (_backButton == null) { _backButton = ui.CreateBackButton(rectTransform); _backButton.onClick.AddListener(delegate() { if (!_loading) { if (_songPreviewPlayer != null) { _songPreviewPlayer.CrossfadeToDefault(); } try { _songLoader.RefreshSongs(); _notUpdatedSongs.Clear(); } catch (Exception e) { log.Exception("Can't refresh songs! EXCEPTION: " + e); } DismissModalViewController(null, false); } }); } GetPage(_songListViewController._currentPage); base.DidActivate(); }
protected override void DidActivate() { ui = BSMultiplayerUI._instance; _songLoader = FindObjectOfType <SongLoader>(); if (_songPreviewPlayer == null) { ObjectProvider[] providers = Resources.FindObjectsOfTypeAll <ObjectProvider>().Where(x => x.name == "SongPreviewPlayerProvider").ToArray(); if (providers.Length > 0) { _songPreviewPlayer = providers[0].GetProvidedObject <SongPreviewPlayer>(); } } if (_backButton == null) { _backButton = ui.CreateBackButton(rectTransform); _backButton.onClick.AddListener(delegate() { BSMultiplayerMain._instance.DataReceived -= DataReceived; BSMultiplayerMain._instance.DisconnectFromServer(); DismissModalViewController(null, false); }); } if (_timerText == null) { _timerText = ui.CreateText(rectTransform, "", new Vector2(0f, -5f)); _timerText.fontSize = 8f; _timerText.alignment = TextAlignmentOptions.Center; _timerText.rectTransform.sizeDelta = new Vector2(20f, 6f); } if (_selectText == null) { _selectText = ui.CreateText(rectTransform, "", new Vector2(0f, -36f)); _selectText.fontSize = 7f; _selectText.alignment = TextAlignmentOptions.Center; _selectText.rectTransform.sizeDelta = new Vector2(40f, 6f); } if (_loadingIndicator == null) { try { _loadingIndicator = ui.CreateLoadingIndicator(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); } catch (Exception e) { Console.WriteLine("EXCEPTION: " + e); } } if (_selectedSongCell == null) { _selectedSongCell = Instantiate(Resources.FindObjectsOfTypeAll <SongListTableCell>().First(x => x.name == "SongListTableCell"), 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, 0); _selectedSongCell.gameObject.SetActive(false); } else { _selectedSongCell.gameObject.SetActive(false); } if (BSMultiplayerMain._instance.ConnectToServer()) { BSMultiplayerMain._instance.SendString(JsonUtility.ToJson(new ClientCommand(ClientCommandType.GetServerState))); BSMultiplayerMain._instance.SendString(JsonUtility.ToJson(new ClientCommand(ClientCommandType.GetAvailableSongs))); StartCoroutine(BSMultiplayerMain._instance.ReceiveFromServerCoroutine()); BSMultiplayerMain._instance.DataReceived += DataReceived; } else { _loading = false; TextMeshProUGUI _errorText = ui.CreateText(rectTransform, String.Format("Can't connect to server!"), new Vector2(0f, -48f)); _errorText.alignment = TextAlignmentOptions.Center; Destroy(_errorText.gameObject, 5f); } }
//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /// <summary> /// On activation /// </summary> /// <param name="p_FirstActivation">Is the first activation ?</param> /// <param name="p_AddedToHierarchy">Activation type</param> /// <param name="p_ScreenSystemEnabling">Is screen system enabled</param> protected override void DidActivate(bool p_FirstActivation, bool p_AddedToHierarchy, bool p_ScreenSystemEnabling) { /// Forward event base.DidActivate(p_FirstActivation, p_AddedToHierarchy, p_ScreenSystemEnabling); if (p_FirstActivation) { /// Scale down up & down button m_SongUpButton.transform.localScale = Vector3.one * 0.6f; m_SongDownButton.transform.localScale = Vector3.one * 0.6f; /// Create type selector m_TypeSegmentControl = Utils.GameUI.CreateTextSegmentedControl(m_TypeSegmentPanel.transform as RectTransform, false); m_TypeSegmentControl.SetTexts(new string[] { "Requests", "History", "Blacklist" }); m_TypeSegmentControl.ReloadData(); m_TypeSegmentControl.didSelectCellEvent += OnQueueTypeChanged; /// Prepare song list var l_BSMLTableView = m_SongListView.GetComponentInChildren <BSMLTableView>(); l_BSMLTableView.SetDataSource(null, false); GameObject.DestroyImmediate(m_SongListView.GetComponentInChildren <CustomListTableData>()); m_SongList = l_BSMLTableView.gameObject.AddComponent <SongListDataSource>(); m_SongList.TableViewInstance = l_BSMLTableView; l_BSMLTableView.SetDataSource(m_SongList, false); /// Bind events m_SongUpButton.onClick.AddListener(OnSongPageUpPressed); m_SongList.TableViewInstance.didSelectCellWithIdxEvent += OnSongSelected; m_SongDownButton.onClick.AddListener(OnSongPageDownPressed); /// Find song preview object m_SongPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First(); /// Show song info panel m_SongInfo_Detail = new BeatSaberPlus.UI.Widget.SongDetail(m_SongInfoPanel.transform); UnselectSong(); m_SongInfo_Detail.SetFavoriteToggleEnabled(true); m_SongInfo_Detail.SetFavoriteToggleImage("BeatSaberPlus.Plugins.ChatRequest.Resources.Blacklist.png", "BeatSaberPlus.Plugins.ChatRequest.Resources.Unblacklist.png"); m_SongInfo_Detail.SetFavoriteToggleHoverHint("Add/Remove to blacklist"); m_SongInfo_Detail.SetFavoriteToggleCallback(OnBlacklistButtonPressed); m_SongInfo_Detail.SetPracticeButtonEnabled(true); m_SongInfo_Detail.SetPracticeButtonText("Skip"); m_SongInfo_Detail.SetPracticeButtonAction(SkipSong); m_SongInfo_Detail.SetPlayButtonText("Play"); m_SongInfo_Detail.SetPlayButtonEnabled(true); m_SongInfo_Detail.SetPlayButtonAction(PlaySong); /// Init loading modal m_LoadingModalSpinner = GameObject.Instantiate(Resources.FindObjectsOfTypeAll <LoadingControl>().First(), m_LoadingModal.transform); m_LoadingModalSpinner.transform.SetAsLastSibling(); Destroy(m_LoadingModalSpinner.GetComponent <Touchable>()); /// Force change to tab Request OnQueueTypeChanged(null, 0); } /// Go back to request tab if (!p_FirstActivation && m_TypeSegmentControl.selectedCellNumber != 0) { m_TypeSegmentControl.SelectCellWithNumber(0); OnQueueTypeChanged(null, 0); } else { RebuildSongList(true); } }
//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /// <summary> /// On activation /// </summary> /// <param name="p_FirstActivation">Is the first activation ?</param> /// <param name="p_AddedToHierarchy">Activation type</param> /// <param name="p_ScreenSystemEnabling">Is screen system enabled</param> protected override void DidActivate(bool p_FirstActivation, bool p_AddedToHierarchy, bool p_ScreenSystemEnabling) { /// Forward event base.DidActivate(p_FirstActivation, p_AddedToHierarchy, p_ScreenSystemEnabling); if (p_FirstActivation) { m_SongsProvider = Plugins.ChatRequest.ChatRequest.Instance.SongHistory; /// Scale down up & down button m_SongUpButton.transform.localScale = Vector3.one * 0.6f; m_SongDownButton.transform.localScale = Vector3.one * 0.6f; /// Create type selector m_TypeSegmentControl = Utils.GameUI.CreateTextSegmentedControl(m_TypeSegmentPanel.transform as RectTransform, false); m_TypeSegmentControl.SetTexts(new string[] { "Playlist Generator", "Playlist" }); m_TypeSegmentControl.ReloadData(); m_TypeSegmentControl.didSelectCellEvent += OnTabChanged; /// Bind events m_SongUpButton.onClick.AddListener(OnSongPageUpPressed); m_SongList.tableView.didSelectCellWithIdxEvent += OnSongSelected; m_SongDownButton.onClick.AddListener(OnSongPageDownPressed); /// Find song preview object m_SongPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().First(); /// Show song info panel m_SongInfo_Detail = new BeatSaberPlus.UI.Widget.SongDetail(m_SongInfoPanel.transform); UnselectSong(); m_SongInfo_Detail.SetPlayButtonText("Play"); m_SongInfo_Detail.SetPlayButtonEnabled(true); m_SongInfo_Detail.SetPlayButtonAction(PlaySong); m_SongInfo_Detail.OnActiveDifficultyChanged += (x) => { /// Hide if no data if (x == null) { BeatSaberPlus.UI.ViewFlowCoordinator.Instance.SetRightScreen(null); } /// Show score board var l_ScoreBoard = Resources.FindObjectsOfTypeAll <PlatformLeaderboardViewController>().FirstOrDefault(); if (l_ScoreBoard != null) { if (!l_ScoreBoard.isInViewControllerHierarchy) { BeatSaberPlus.UI.ViewFlowCoordinator.Instance.SetRightScreen(l_ScoreBoard); } l_ScoreBoard.SetData(x); } }; /// Init loading modal m_LoadingModalSpinner = GameObject.Instantiate(Resources.FindObjectsOfTypeAll <LoadingControl>().First(), m_LoadingModal.transform); m_LoadingModalSpinner.transform.SetAsLastSibling(); Destroy(m_LoadingModalSpinner.GetComponent <Touchable>()); /// Force change to tab Request OnTabChanged(null, 0); } }
//static bool test(string x) //{ // File.AppendAllText("c:\\sehria\\objects.txt", x + "\r\n"); // return 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"); InitConfirmationDialog(); //Resources.FindObjectsOfTypeAll<UnityEngine.Object>().Any(x => (test(x.name))); ; _songListTableCellInstance = Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(o => (o.name == "LevelListTableCell")); _songPreviewPlayer = Resources.FindObjectsOfTypeAll <SongPreviewPlayer>().FirstOrDefault(); DidSelectRowEvent += DidSelectRow; RectTransform container = new GameObject("RequestBotContainer", typeof(RectTransform)).transform as RectTransform; container.SetParent(rectTransform, false); container.sizeDelta = new Vector2(60f, 0f); try { InitKeyboardDialog(); } catch (Exception ex) { Plugin.Log(ex.ToString()); } 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); RequestBot.AddKeyboard(CenterKeys, "mainpanel.kbd"); ColorDeckButtons(CenterKeys, Color.white, Color.magenta); #endif RequestBot.AddKeyboard(CenterKeys, "CenterPanel.kbd"); CenterKeys.DefaultActions(); // 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; Resources.FindObjectsOfTypeAll <VRUIScreenSystem>().First().title = isShowingHistory ? "Song Request History" : "Song Request Queue"; UpdateRequestUI(true); SetUIInteractivity(); _lastSelection = -1; }); _historyHintText = BeatSaberUI.AddHintText(_historyButton.transform as RectTransform, ""); // 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) { _onConfirm = () => { RequestBot.Blacklist(_selectedRow, isShowingHistory, true); if (_selectedRow > 0) { _selectedRow--; } }; var song = SongInfoForRow(_selectedRow).song; _warningTitle.text = "Blacklist Song Warning"; _warningMessage.text = $"Blacklisting {song["songName"].Value} by {song["authorName"].Value}\r\nDo you want to continue?"; confirmDialogActive = true; _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(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) { _onConfirm = () => { currentsong = SongInfoForRow(_selectedRow); RequestBot.Skip(_selectedRow); if (_selectedRow > 0) { _selectedRow--; } }; var song = SongInfoForRow(_selectedRow).song; _warningTitle.text = "Skip Song Warning"; _warningMessage.text = $"Skipping {song["songName"].Value} by {song["authorName"].Value}\r\nDo you want to continue?"; confirmDialogActive = true; _confirmationDialog.Present(); } }); BeatSaberUI.AddHintText(_skipButton.transform as RectTransform, "Remove the selected request from the queue."); // 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; } }); BeatSaberUI.AddHintText(_playButton.transform as RectTransform, "Download and scroll to the currently selected request."); // 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(); }); BeatSaberUI.AddHintText(_queueButton.transform as RectTransform, "Open/Close the queue."); } base.DidActivate(firstActivation, type); UpdateRequestUI(); SetUIInteractivity(true); }
public PauseChampModifierController(StandardLevelDetailViewController standardLevelDetailViewController, SongPreviewPlayer songPreviewPlayer, SettingsModalController settingsModalController) { this.standardLevelDetailViewController = standardLevelDetailViewController; this.songPreviewPlayer = songPreviewPlayer; this.settingsModalController = settingsModalController; }
public MenuVolumeManager(VolumeSettings volumeSettings, SongPreviewPlayer songPreviewPlayer) { _volumeSettings = volumeSettings; _songPreviewPlayer = songPreviewPlayer; }
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"); _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 // 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); }
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); }