using UnityEngine; using System.Linq; using System; using System.Collections.Generic; using UnityEngine.UI; using HMUI; using VRUI; using SongBrowserPlugin.DataAccess; using System.IO; using SongLoaderPlugin; using System.Security.Cryptography; using System.Text; namespace SongBrowserPlugin.UI { /// /// Hijack the flow coordinator. Have access to all StandardLevel easily. /// public class SongBrowserUI : MonoBehaviour { // Logging public const String Name = "SongBrowserUI"; private const float SEGMENT_PERCENT = 0.1f; private Logger _log = new Logger(Name); // Beat Saber UI Elements private StandardLevelSelectionFlowCoordinator _levelSelectionFlowCoordinator; private StandardLevelListViewController _levelListViewController; private StandardLevelDetailViewController _levelDetailViewController; private StandardLevelDifficultyViewController _levelDifficultyViewController; private StandardLevelSelectionNavigationController _levelSelectionNavigationController; private StandardLevelListTableView _levelListTableView; private RectTransform _tableViewRectTransform; private Button _tableViewPageUpButton; private Button _tableViewPageDownButton; // New UI Elements private List _sortButtonGroup; private Button _addFavoriteButton; private String _addFavoriteButtonText = null; private SimpleDialogPromptViewController _simpleDialogPromptViewControllerPrefab; private SimpleDialogPromptViewController _deleteDialog; private Button _deleteButton; private Button _pageUpTenPercent; private Button _pageDownTenPercent; private SearchKeyboardViewController _searchViewController; // Debug private int _sortButtonLastPushedIndex = 0; private int _lastRow = 0; // Model private SongBrowserModel _model; /// /// Constructor /// public SongBrowserUI() : base() { if (_model == null) { _model = new SongBrowserModel(); } _model.Init(); _sortButtonLastPushedIndex = (int)(_model.Settings.sortMode); } /// /// Builds the UI for this plugin. /// public void CreateUI() { _log.Trace("CreateUI()"); try { if (_levelSelectionFlowCoordinator == null) { _levelSelectionFlowCoordinator = Resources.FindObjectsOfTypeAll().First(); } if (_levelListViewController == null) { _levelListViewController = _levelSelectionFlowCoordinator.GetPrivateField("_levelListViewController"); } if (_levelDetailViewController == null) { _levelDetailViewController = _levelSelectionFlowCoordinator.GetPrivateField("_levelDetailViewController"); } if (_levelSelectionNavigationController == null) { _levelSelectionNavigationController = _levelSelectionFlowCoordinator.GetPrivateField("_levelSelectionNavigationController"); } if (_levelDifficultyViewController == null) { _levelDifficultyViewController = _levelSelectionFlowCoordinator.GetPrivateField("_levelDifficultyViewController"); } if (_levelListTableView == null) { _levelListTableView = this._levelListViewController.GetComponentInChildren(); } _simpleDialogPromptViewControllerPrefab = Resources.FindObjectsOfTypeAll().First(); this._deleteDialog = UnityEngine.Object.Instantiate(this._simpleDialogPromptViewControllerPrefab); this._deleteDialog.gameObject.SetActive(false); this.CreateUIElements(); _levelListViewController.didSelectLevelEvent += OnDidSelectLevelEvent; } catch (Exception e) { _log.Exception("Exception during CreateUI: ", e); } } /// /// Builds the SongBrowser UI /// private void CreateUIElements() { _log.Trace("CreateUIElements"); try { // Gather some transforms and templates to use. RectTransform sortButtonTransform = this._levelSelectionNavigationController.transform as RectTransform; RectTransform otherButtonTransform = this._levelDetailViewController.transform as RectTransform; Button sortButtonTemplate = Resources.FindObjectsOfTypeAll