/// <summary>
        /// Constructor.  Acquire all necessary BeatSaberUi elements.
        /// </summary>
        /// <param name="flowCoordinator"></param>
        public BeatSaberUIController(FlowCoordinator flowCoordinator)
        {
            LevelSelectionFlowCoordinator = flowCoordinator;

            // gather controllers and ui elements.
            LevelPackViewController = LevelSelectionFlowCoordinator.GetPrivateField <LevelPacksViewController>("_levelPacksViewController");
            Logger.Debug("Acquired LevelPacksViewController [{0}]", LevelPackViewController.GetInstanceID());

            LevelPackDetailViewController = LevelSelectionFlowCoordinator.GetPrivateField <LevelPackDetailViewController>("_levelPackDetailViewController");
            Logger.Debug("Acquired LevelPackDetailViewController [{0}]", LevelPackDetailViewController.GetInstanceID());

            LevelPacksTableView = LevelPackViewController.GetPrivateField <LevelPacksTableView>("_levelPacksTableView");
            Logger.Debug("Acquired LevelPacksTableView [{0}]", LevelPacksTableView.GetInstanceID());

            LevelPackLevelsViewController = LevelSelectionFlowCoordinator.GetPrivateField <LevelPackLevelsViewController>("_levelPackLevelsViewController");
            Logger.Debug("Acquired LevelPackLevelsViewController [{0}]", LevelPackLevelsViewController.GetInstanceID());

            LevelPackLevelsTableView = this.LevelPackLevelsViewController.GetPrivateField <LevelPackLevelsTableView>("_levelPackLevelsTableView");
            Logger.Debug("Acquired LevelPackLevelsTableView [{0}]", LevelPackLevelsTableView.GetInstanceID());

            LevelDetailViewController = LevelSelectionFlowCoordinator.GetPrivateField <StandardLevelDetailViewController>("_levelDetailViewController");
            Logger.Debug("Acquired StandardLevelDetailViewController [{0}]", LevelDetailViewController.GetInstanceID());

            StandardLevelDetailView = LevelDetailViewController.GetPrivateField <StandardLevelDetailView>("_standardLevelDetailView");
            Logger.Debug("Acquired StandardLevelDetailView [{0}]", StandardLevelDetailView.GetInstanceID());

            BeatmapCharacteristicSelectionViewController = Resources.FindObjectsOfTypeAll <BeatmapCharacteristicSegmentedControlController>().First();
            Logger.Debug("Acquired BeatmapCharacteristicSegmentedControlController [{0}]", BeatmapCharacteristicSelectionViewController.GetInstanceID());

            LevelSelectionNavigationController = LevelSelectionFlowCoordinator.GetPrivateField <DismissableNavigationController>("_navigationController");
            Logger.Debug("Acquired DismissableNavigationController [{0}]", LevelSelectionNavigationController.GetInstanceID());

            LevelDifficultyViewController = StandardLevelDetailView.GetPrivateField <BeatmapDifficultySegmentedControlController>("_beatmapDifficultySegmentedControlController");
            Logger.Debug("Acquired BeatmapDifficultySegmentedControlController [{0}]", LevelDifficultyViewController.GetInstanceID());

            LevelPackLevelsTableViewRectTransform = LevelPackLevelsTableView.transform as RectTransform;
            Logger.Debug("Acquired TableViewRectTransform from LevelPackLevelsTableView [{0}]", LevelPackLevelsTableViewRectTransform.GetInstanceID());

            TableView tableView = ReflectionUtil.GetPrivateField <TableView>(LevelPackLevelsTableView, "_tableView");

            TableViewPageUpButton   = tableView.GetPrivateField <Button>("_pageUpButton");
            TableViewPageDownButton = tableView.GetPrivateField <Button>("_pageDownButton");
            Logger.Debug("Acquired Page Up and Down buttons...");

            PlayContainer = StandardLevelDetailView.GetComponentsInChildren <RectTransform>().First(x => x.name == "PlayContainer");
            PlayButtons   = PlayContainer.GetComponentsInChildren <RectTransform>().First(x => x.name == "PlayButtons");

            PlayButton     = Resources.FindObjectsOfTypeAll <Button>().First(x => x.name == "PlayButton");
            PracticeButton = PlayButtons.GetComponentsInChildren <Button>().First(x => x.name == "PracticeButton");

            SimpleDialogPromptViewControllerPrefab = Resources.FindObjectsOfTypeAll <SimpleDialogPromptViewController>().First();
        }
Ejemplo n.º 2
0
        protected override void DidActivate(bool firstActivation, VRUIViewController.ActivationType activationType)
        {
            if (firstActivation && activationType == VRUIViewController.ActivationType.AddedToHierarchy)
            {
                _additionalContentModel = Resources.FindObjectsOfTypeAll <AdditionalContentModelSO>().FirstOrDefault();
                RectTransform container = new GameObject("HorizontalListContainer", typeof(RectTransform)).transform as RectTransform;
                container.SetParent(rectTransform, false);
                container.sizeDelta = Vector2.zero;
                container.anchorMin = new Vector2(0.1f, 0); //Squish the list container a little bit
                container.anchorMax = new Vector2(0.9f, 1); //To make room for the forward/backward buttons

                var tableGameObject = new GameObject("CustomTableView");
                tableGameObject.SetActive(false);
                tableView = tableGameObject.AddComponent <TableView>();
                tableView.gameObject.AddComponent <RectMask2D>();
                tableView.transform.SetParent(container, false);
                tableView.SetPrivateField("_isInitialized", false);
                tableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                tableView.SetPrivateField("_tableType", TableView.TableType.Horizontal);

                (tableView.transform as RectTransform).anchorMin        = Vector2.zero;
                (tableView.transform as RectTransform).anchorMax        = Vector2.one;
                (tableView.transform as RectTransform).sizeDelta        = Vector2.zero;
                (tableView.transform as RectTransform).anchoredPosition = Vector2.zero;

                // Thanks alot Caeden117 for helping out. Used his Counters+ Horizontal Settings view controller to get all rects set correctly.

                PageLeftButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageLeftButton")), transform);
                RectTransform buttonTransform = PageLeftButton.transform.Find("BG") as RectTransform;
                RectTransform glow            = Instantiate(Resources.FindObjectsOfTypeAll <GameObject>().Last(x => (x.name == "GlowContainer")), PageLeftButton.transform).transform as RectTransform;
                glow.localPosition    = buttonTransform.localPosition;
                glow.anchoredPosition = buttonTransform.anchoredPosition;
                glow.anchorMin        = buttonTransform.anchorMin;
                glow.anchorMax        = buttonTransform.anchorMax;
                glow.sizeDelta        = buttonTransform.sizeDelta;
                PageLeftButton.transform.localPosition = new Vector3(-80, 2.5f, -5);
                PageLeftButton.interactable            = true;
                PageRightButton       = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageRightButton")), transform);
                buttonTransform       = PageRightButton.transform.Find("BG") as RectTransform;
                glow                  = Instantiate(Resources.FindObjectsOfTypeAll <GameObject>().Last(x => (x.name == "GlowContainer")), PageRightButton.transform).transform as RectTransform;
                glow.localPosition    = buttonTransform.localPosition;
                glow.anchoredPosition = buttonTransform.anchoredPosition;
                glow.anchorMin        = buttonTransform.anchorMin;
                glow.anchorMax        = buttonTransform.anchorMax;
                glow.sizeDelta        = buttonTransform.sizeDelta;
                PageRightButton.transform.localPosition = new Vector3(80, 2.5f, -5);
                PageRightButton.interactable            = true;

                RectTransform viewport = new GameObject("Viewport").AddComponent <RectTransform>(); //Make a Viewport RectTransform
                viewport.SetParent(tableView.transform as RectTransform, false);                    //It expects one from a ScrollRect, so we have to make one ourselves.
                viewport.sizeDelta = Vector2.zero;                                                  //Important to set this to zero so the TableView can scroll through all available cells.
                tableView.SetPrivateField("_pageUpButton", PageLeftButton);                         //Set Up button to Left
                tableView.SetPrivateField("_pageDownButton", PageRightButton);                      //Set down button to Right

                tableView.Init();
                tableView.SetPrivateField("_scrollRectTransform", viewport); //Set it with our hot-out-of-the-oven Viewport.
                tableGameObject.SetActive(true);
                _levelPacksTableView = new LevelPacksTableView();
                _levelPacksTableView.SetPrivateField("_tableView", tableView);
                string[] packs = new string[1];
                packs[0] = "";
                _levelPacksTableView.SetPrivateField("_promoPackIDStrings", packs);
                LevelPackTableCell prefab = Resources.FindObjectsOfTypeAll <LevelPackTableCell>().First(x => (x.name == "LevelPackTableCell"));
                _levelPacksTableView.SetPrivateField("_cellPrefab", prefab);
                _levelPacksTableView.SetPrivateField("_cellWidth", 30f);
                _levelPacksTableView.SetPrivateField("_additionalContentModel", _additionalContentModel);

                _levelPacksTableView.didSelectPackEvent += didSelectPackEvent;
                _levelPacksTableView.Init();
                for (int i = 0; i < tableView.transform.childCount; i++)
                {
                    (tableView.transform.GetChild(i).transform as RectTransform).anchoredPosition = Vector3.zero;
                    (tableView.transform.GetChild(i).transform as RectTransform).anchorMin        = Vector3.zero;
                    (tableView.transform.GetChild(i).transform as RectTransform).anchorMax        = Vector3.one;
                }
                tableView.ReloadData();
                tableView.SelectCellWithIdx(0, false);
                _levelPacksTableView.SelectCellWithIdx(_selectedPackNum);
                _levelPacksTableView.RefreshPacksAvailability();
            }
            _additionalContentModel.didInvalidateDataEvent += HandleAdditionalContentModelDidInvalidateData;
        }