protected override void DidActivate(bool firstActivation, ActivationType type)
        {
            ui = BSMultiplayerUI._instance;

            _parentMasterViewController = transform.parent.GetComponent <MultiplayerLobbyViewController>();

            _leaderboardTableCellInstance = Resources.FindObjectsOfTypeAll <LeaderboardTableCell>().First(x => (x.name == "LeaderboardTableCell"));

            if (_leaderboardTableView == null)
            {
                _leaderboardTableView = new GameObject().AddComponent <TableView>();

                _leaderboardTableView.transform.SetParent(rectTransform, false);

                Mask viewportMask = Instantiate(Resources.FindObjectsOfTypeAll <Mask>().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, 0.5f);
                (_leaderboardTableView.transform as RectTransform).anchorMax        = new Vector2(1f, 0.5f);
                (_leaderboardTableView.transform as RectTransform).sizeDelta        = new Vector2(0f, 60f);
                (_leaderboardTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, -3f);
            }
        }
Ejemplo n.º 2
0
        public void Awake()
        {
            var viewGO = new GameObject();

            viewGO.SetActive(false);
            _tableView = viewGO.AddComponent <TableView>();
            _tableView.transform.SetParent(transform, false);
            _tableView.SetField("_isInitialized", false);
            _tableView.SetField("_preallocatedCells", new TableView.CellsGroup[0]);
            _tableView.InvokeMethod("Init");
            viewGO.SetActive(true);

            //Following fix courtesy of superrob's multiplayer fork
            RectTransform viewport = new GameObject("Viewport").AddComponent <RectTransform>();

            viewport.SetParent(_tableView.transform as RectTransform, false);
            viewport.sizeDelta = new Vector2(0f, 58f);
            _tableView.SetField("_scrollRectTransform", viewport);

            var currentView      = Resources.FindObjectsOfTypeAll <LeaderboardTableView>().First();
            var currentTransform = (currentView.transform as RectTransform);
            var newTransform     = (_tableView.transform as RectTransform);

            //TODO: Wouldn't it be easier to set anchors to .5 across the board, then work from there?
            newTransform.anchorMin        = new Vector2(currentTransform.anchorMin.x, currentTransform.anchorMin.y);
            newTransform.anchorMax        = new Vector2(currentTransform.anchorMax.x, currentTransform.anchorMax.y);
            newTransform.anchoredPosition = new Vector2(currentTransform.anchoredPosition.x - 4, currentTransform.anchoredPosition.y - 4); //In 0.12.0, the table was moved slightly to the right. Here I'm moving it back. Oh, and down.
                                                                                                                                           //In 0.13.1, it was changed again slightly. Just wanted to note that
            newTransform.sizeDelta = new Vector2(currentTransform.sizeDelta.x - 44, currentTransform.sizeDelta.y - 20);

            _cellInstance = Resources.FindObjectsOfTypeAll <LeaderboardTableCell>().First(x => x.name == "LeaderboardTableCell");
        }
Ejemplo n.º 3
0
        static void Postfix(LeaderboardTableCell __instance)
        {
            TextMeshProUGUI scoreText = __instance.GetPrivateField <TextMeshProUGUI>("_scoreText");
            string          name      = "<color=" + Plugin.scoreColor + ">" + scoreText.text + "</color>"; // to allow replacing default colours

            scoreText.text = name;
        }
        public void Init()
        {
            LeaderboardTableCell cell = GetComponent <LeaderboardTableCell>();

            foreach (FieldInfo info in cell.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic))
            {
                info.SetValue(this, info.GetValue(cell));
            }

            Destroy(cell);

            reuseIdentifier = "DownloadCell";

            _playerNameText.rectTransform.anchoredPosition = new Vector2(12f, 0f);

            playerSpeakerIcon = new GameObject("Player Speaker Icon", typeof(Canvas), typeof(CanvasRenderer)).AddComponent <Image>();
            playerSpeakerIcon.GetComponent <Canvas>().renderMode = RenderMode.WorldSpace;
            playerSpeakerIcon.rectTransform.SetParent(transform);
            playerSpeakerIcon.rectTransform.localScale       = new Vector3(0.05f, 0.05f, 0.05f);
            playerSpeakerIcon.rectTransform.pivot            = new Vector2(0.5f, 0.5f);
            playerSpeakerIcon.rectTransform.anchoredPosition = new Vector2(-38f, 0f);
            playerSpeakerIcon.sprite   = Sprites.speakerIcon;
            playerSpeakerIcon.material = Sprites.NoGlowMat;

            _scoreText.overflowMode       = TextOverflowModes.Overflow;
            _scoreText.enableWordWrapping = false;
        }
Ejemplo n.º 5
0
        protected override void DidActivate(bool firstActivation, ActivationType activationType)
        {
            if (firstActivation && activationType == ActivationType.AddedToHierarchy)
            {
                _downloadListTableCellInstance = Resources.FindObjectsOfTypeAll <LeaderboardTableCell>().First();

                _destroyRoomButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton", new Vector2(44f, 33f), new Vector2(26f, 10f), () => { DestroyRoomPressed?.Invoke(); }, "Destroy\nroom");
                _destroyRoomButton.ToggleWordWrapping(false);

                _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, -12f);
                (_pageUpButton.transform as RectTransform).sizeDelta        = new Vector2(40f, 6f);
                _pageUpButton.interactable = true;
                _pageUpButton.onClick.AddListener(delegate()
                {
                    _downloadProgressTableView.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, 6f);
                (_pageDownButton.transform as RectTransform).sizeDelta        = new Vector2(40f, 6f);
                _pageDownButton.interactable = true;
                _pageDownButton.onClick.AddListener(delegate()
                {
                    _downloadProgressTableView.PageScrollDown();
                });
                _pageDownButton.interactable = false;

                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);

                _downloadProgressTableView = new GameObject("CustomTableView").AddComponent <TableView>();
                _downloadProgressTableView.gameObject.AddComponent <RectMask2D>();
                _downloadProgressTableView.transform.SetParent(container, false);

                _downloadProgressTableView.SetPrivateField("_isInitialized", false);
                _downloadProgressTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                _downloadProgressTableView.Init();

                (_downloadProgressTableView.transform as RectTransform).anchorMin        = new Vector2(0f, 0f);
                (_downloadProgressTableView.transform as RectTransform).anchorMax        = new Vector2(1f, 1f);
                (_downloadProgressTableView.transform as RectTransform).sizeDelta        = new Vector2(0f, 0f);
                (_downloadProgressTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f);

                ReflectionUtil.SetPrivateField(_downloadProgressTableView, "_pageUpButton", _pageUpButton);
                ReflectionUtil.SetPrivateField(_downloadProgressTableView, "_pageDownButton", _pageDownButton);

                _downloadProgressTableView.dataSource = this;
            }
        }
        public void Init()
        {
            LeaderboardTableCell cell = GetComponent <LeaderboardTableCell>();

            foreach (FieldInfo info in cell.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic))
            {
                info.SetValue(this, info.GetValue(cell));
            }

            Destroy(cell);

            reuseIdentifier = "PlayerCell";

            if (_buttonStrokeSprite == null)
            {
                _buttonStrokeSprite = Resources.FindObjectsOfTypeAll <Sprite>().First(x => x.name == "RoundRectSmallStroke");
            }

            _playerNameText.rectTransform.anchoredPosition = new Vector2(12f, 0f);

            _playerSpeakerIcon = new GameObject("Player Speaker Icon", typeof(Canvas), typeof(CanvasRenderer)).AddComponent <Image>();
            _playerSpeakerIcon.GetComponent <Canvas>().renderMode = RenderMode.WorldSpace;
            _playerSpeakerIcon.rectTransform.SetParent(transform);
            _playerSpeakerIcon.rectTransform.localScale       = new Vector3(0.05f, 0.05f, 0.05f);
            _playerSpeakerIcon.rectTransform.pivot            = new Vector2(0.5f, 0.5f);
            _playerSpeakerIcon.rectTransform.anchoredPosition = new Vector2(-38f, 0f);
            _playerSpeakerIcon.sprite   = Sprites.speakerIcon;
            _playerSpeakerIcon.material = Sprites.NoGlowMat;

            _transferHostButton = BeatSaberUI.CreateUIButton(transform as RectTransform, "CancelButton", new Vector2(14f, 0f), new Vector2(14f, 6f), () => {
                if (buttonsInterface != null)
                {
                    buttonsInterface.TransferHostButtonWasPressed(playerInfo);
                }
            }, "PASS\nHOST");

            _transferHostButton.ToggleWordWrapping(false);
            _transferHostButton.SetButtonTextSize(3.25f);
            _transferHostButton.GetComponentsInChildren <UnityEngine.UI.Image>().First(x => x.name == "Stroke").sprite = _buttonStrokeSprite;
            _transferHostButtonEnabled = true;

            _muteButton = BeatSaberUI.CreateUIButton(transform as RectTransform, "CancelButton", new Vector2(30f, 0f), new Vector2(14f, 6f), () => {
                if (buttonsInterface != null)
                {
                    buttonsInterface.MuteButtonWasPressed(playerInfo);
                }
            }, "MUTE");
            _isMuted = false;

            _muteButton.ToggleWordWrapping(false);
            _muteButton.GetComponentsInChildren <UnityEngine.UI.Image>().First(x => x.name == "Stroke").sprite = _buttonStrokeSprite;
            _muteButtonEnabled = true;

            _scoreText.overflowMode       = TextOverflowModes.Overflow;
            _scoreText.enableWordWrapping = false;
        }
        public TableCell CellForRow(int row)
        {
            LeaderboardTableCell cell = Instantiate(_leaderboardTableCellInstance);

            cell.playerName    = playerInfos[row].playerName;
            cell.score         = playerInfos[row].playerScore;
            cell.rank          = row + 1;
            cell.showFullCombo = false;

            return(cell);
        }
Ejemplo n.º 8
0
        static void Postfix(LeaderboardTableCell __instance)
        {
            TextMeshProUGUI playerNameText = __instance.GetPrivateField <TextMeshProUGUI>("_playerNameText");
            string          name           = "<color=#FFFFFF>" + playerNameText.text + "</color>"; // to allow replacing default colours

            foreach (string key in Plugin.hexMap.Keys)
            {
                name = name.Replace(key, Plugin.hexMap[key]);
            }
            playerNameText.text = name;
        }
Ejemplo n.º 9
0
        public virtual TableCell CellForRow(int row)
        {
            LeaderboardTableCell _tableCell = Instantiate(_songListTableCellInstance);

            _tableCell.playerName      = Data[row].playerName;
            _tableCell.score           = (int)Data[row].playerScore;
            _tableCell.rank            = row + 1;
            _tableCell.specialScore    = Data[row].playerId == Controllers.PlayerController.Instance._playerInfo.playerId;
            _tableCell.showFullCombo   = Data[row].playerCutBlocks == Data[row].playerTotalBlocks && Data[row].playerTotalBlocks > 0;
            _tableCell.reuseIdentifier = "CustomListCell";
            return(_tableCell);
        }
Ejemplo n.º 10
0
        public void Init()
        {
            LeaderboardTableCell cell = GetComponent <LeaderboardTableCell>();

            foreach (FieldInfo info in cell.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic))
            {
                info.SetValue(this, info.GetValue(cell));
            }

            Destroy(cell);

            reuseIdentifier = "DownloadCell";
        }
Ejemplo n.º 11
0
        public TableCell CellForIdx(TableView tableView, int row)
        {
            LeaderboardTableCell cell = Instantiate(_leaderboardTableCellInstance);

            cell.reuseIdentifier = "ResultsCell";

            cell.playerName    = InGameOnlineController.Instance.playerScores[row].name;
            cell.score         = (int)InGameOnlineController.Instance.playerScores[row].score;
            cell.rank          = row + 1;
            cell.showFullCombo = false;

            _tableCells.Add(cell);
            return(cell);
        }
        public TableCell CellForIdx(int row)
        {
            LeaderboardTableCell cell = Instantiate(_leaderboardTableCellInstance);

            cell.reuseIdentifier = "ResultsCell";

            cell.playerName    = _playerInfos[row].playerName;
            cell.score         = (int)_playerInfos[row].playerScore;
            cell.rank          = row + 1;
            cell.showFullCombo = false;

            _tableCells.Add(cell);
            return(cell);
        }
Ejemplo n.º 13
0
        public TableCell CellForRow(int row)
        {
            LeaderboardTableCell _originalCell = Instantiate(_downloadListTableCellInstance);

            DownloadStateTableCell _tableCell = _originalCell.gameObject.AddComponent <DownloadStateTableCell>();

            _tableCell.Init();

            _tableCell.rank          = 0;
            _tableCell.showFullCombo = false;
            _tableCell.playerName    = _playersList[row].playerName;
            _tableCell.progress      = (_playersList[row].playerState == PlayerState.DownloadingSongs ? (_playersList[row].playerProgress / 100f) : 1f);

            _tableCells.Add(_tableCell);
            return(_tableCell);
        }
Ejemplo n.º 14
0
        protected override void DidActivate(bool firstActivation, ActivationType type)
        {
            if (firstActivation)
            {
                _songListTableCellInstance = Resources.FindObjectsOfTypeAll <LeaderboardTableCell>().First(x => (x.name == "LeaderboardTableCell"));

                RectTransform container = new GameObject("CustomListContainer", typeof(RectTransform)).transform as RectTransform;
                container.SetParent(rectTransform, false);
                container.sizeDelta = new Vector2(60f, 0f);

                _customListTableView = new GameObject("CustomListTableView").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, 50f);
                (_customListTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, -5f);

                _customListTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                _customListTableView.SetPrivateField("_isInitialized", false);
                _customListTableView.dataSource = this;

                _customListTableView.didSelectRowEvent += _customListTableView_didSelectRowEvent;

                _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageUpButton")), container, false);
                (_pageUpButton.transform as RectTransform).anchoredPosition = new Vector2(0f, 20f);//-14
                _pageUpButton.interactable = true;
                _pageUpButton.onClick.AddListener(delegate()
                {
                    _customListTableView.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()
                {
                    _customListTableView.PageScrollDown();
                });
            }
            base.DidActivate(firstActivation, type);
        }
Ejemplo n.º 15
0
        public TableCell CellForIdx(TableView tableView, int row)
        {
            LeaderboardTableCell leaderboardTableCell = Instantiate(_cellInstance);

            leaderboardTableCell.reuseIdentifier = "Cell";

            CustomScoreData scoreData = _scores[row];

            leaderboardTableCell.rank          = scoreData.rank;
            leaderboardTableCell.playerName    = scoreData.playerName;
            leaderboardTableCell.score         = scoreData.score;
            leaderboardTableCell.showFullCombo = scoreData.fullCombo;
            leaderboardTableCell.showSeparator = (row != _scores.Count - 1);
            leaderboardTableCell.specialScore  = (_specialScorePos == row);
            if (!(_specialScorePos == row) && _useTeamColors && scoreData.TeamId != "-1")
            {
                leaderboardTableCell.GetField <TextMeshProUGUI>("_playerNameText").color = Team.allTeams.FirstOrDefault(x => x.TeamId == scoreData.TeamId).Color;
            }
            return(leaderboardTableCell);
        }
Ejemplo n.º 16
0
        public TableCell CellForIdx(TableView tableView, int row)
        {
            LeaderboardTableCell _originalCell = Instantiate(_downloadListTableCellInstance);

            PlayerListTableCell _tableCell = _originalCell.gameObject.AddComponent <PlayerListTableCell>();

            _tableCell.Init();

            _tableCell.rank             = 0;
            _tableCell.showFullCombo    = false;
            _tableCell.playerName       = string.Empty;
            _tableCell.progress         = 0f;
            _tableCell.IsTalking        = false;
            _tableCell.NameColor        = new Color32(255, 255, 255, 255);
            _tableCell.playerInfo       = null;
            _tableCell.buttonsInterface = this;
            _tableCell.Update();

            _tableCells.Add(_tableCell);
            return(_tableCell);
        }
Ejemplo n.º 17
0
        public TableCell CellForIdx(int row)
        {
            LeaderboardTableCell _originalCell = Instantiate(_downloadListTableCellInstance);

            PlayerListTableCell _tableCell = _originalCell.gameObject.AddComponent <PlayerListTableCell>();

            _tableCell.Init();

            _tableCell.rank             = 0;
            _tableCell.showFullCombo    = false;
            _tableCell.playerName       = _playersList[row].playerName;
            _tableCell.progress         = (_playersList[row].playerState == PlayerState.DownloadingSongs ? (_playersList[row].playerProgress / 100f) : 1f);
            _tableCell.IsTalking        = InGameOnlineController.Instance.VoiceChatIsTalking(_playersList[row].playerId);
            _tableCell.NameColor        = _playersList[row].playerNameColor;
            _tableCell.playerInfo       = _playersList[row];
            _tableCell.buttonsInterface = this;
            _tableCell.Update();

            _tableCells.Add(_tableCell);
            return(_tableCell);
        }
Ejemplo n.º 18
0
        public TableCell CellForIdx(int idx)
        {
            LeaderboardTableCell _tableCell = Instantiate(_songListTableCellInstance);

            _tableCell.playerName    = $"{(SteamAPI.GetHostId() == Data[idx].playerId ? "[HOST] ": "")}{Data[idx].playerName}";
            _tableCell.score         = (int)Data[idx].playerScore;
            _tableCell.rank          = idx + 1;
            _tableCell.specialScore  = Data[idx].playerId == Controllers.PlayerController.Instance._playerInfo.playerId;
            _tableCell.showFullCombo = Data[idx].playerCutBlocks == Data[idx].playerTotalBlocks && Data[idx].playerTotalBlocks > 0;

            if (Data[idx].SongFailed)
            {
                TextMeshProUGUI score = _tableCell.GetPrivateField <TextMeshProUGUI>("_scoreText");
                score.text  = "FAILED";
                score.color = new Color(255, 0, 0, 1);
            }

            if (SteamAPI.GetHostId() == Data[idx].playerId)
            {
                _tableCell.GetPrivateField <TextMeshProUGUI>("_playerNameText").color = new Color(0, 255, 0, 1);
            }
            _tableCell.reuseIdentifier = "CustomListCell";
            return(_tableCell);
        }
        protected override void DidActivate(bool firstActivation, ActivationType activationType)
        {
            if (firstActivation && activationType == ActivationType.AddedToHierarchy)
            {
                _downloadListTableCellInstance = Resources.FindObjectsOfTypeAll <LeaderboardTableCell>().First();

                _tabControl = CustomExtensions.CreateTextSegmentedControl(rectTransform, new Vector2(0f, -9f));
                _tabControl.SetTexts(new string[] { "Players", "Modifiers" });
                _tabControl.didSelectCellEvent += _tabControl_didSelectCellEvent;

                #region Modifiers tab

                _modifiersTab = new GameObject("ModifiersTab", typeof(RectTransform)).GetComponent <RectTransform>();
                _modifiersTab.SetParent(rectTransform, false);
                _modifiersTab.anchorMin        = new Vector2(0f, 0f);
                _modifiersTab.anchorMax        = new Vector2(1f, 1f);
                _modifiersTab.anchoredPosition = new Vector2(0f, 0f);
                _modifiersTab.sizeDelta        = new Vector2(0f, 0f);

                _modifiersPanel = Instantiate(Resources.FindObjectsOfTypeAll <GameplayModifiersPanelController>().First(), rectTransform, false);
                _modifiersPanel.gameObject.SetActive(true);
                _modifiersPanel.transform.SetParent(_modifiersTab, false);
                (_modifiersPanel.transform as RectTransform).anchorMin        = new Vector2(0.5f, 0f);
                (_modifiersPanel.transform as RectTransform).anchorMax        = new Vector2(0.5f, 1f);
                (_modifiersPanel.transform as RectTransform).anchoredPosition = new Vector2(0f, -23f);
                (_modifiersPanel.transform as RectTransform).sizeDelta        = new Vector2(120f, -23f);

                _modifiersPanel.Init(GameplayModifiers.defaultModifiers);
                _modifiersPanel.Awake();

                var modifierToggles = _modifiersPanel.GetPrivateField <GameplayModifierToggle[]>("_gameplayModifierToggles");

                foreach (var item in modifierToggles)
                {
                    item.toggle.onValueChanged.AddListener((enabled) => { gameplayModifiersChanged?.Invoke(); });
                }

                _modifiersPanelBlocker = new GameObject("ModifiersPanelBlocker", typeof(RectTransform)).GetComponent <RectTransform>(); //"If it works it's not stupid"
                _modifiersPanelBlocker.SetParent(_modifiersTab, false);
                _modifiersPanelBlocker.gameObject.AddComponent <UnityEngine.UI.Image>().color = new Color(0f, 0f, 0f, 0f);
                _modifiersPanelBlocker.anchorMin        = new Vector2(0f, 0f);
                _modifiersPanelBlocker.anchorMax        = new Vector2(1f, 0f);
                _modifiersPanelBlocker.pivot            = new Vector2(0.5f, 0f);
                _modifiersPanelBlocker.sizeDelta        = new Vector2(-10f, 62f);
                _modifiersPanelBlocker.anchoredPosition = new Vector2(0f, 0f);

                #endregion

                #region Players tab

                _playersTab = new GameObject("PlayersTab", typeof(RectTransform)).GetComponent <RectTransform>();
                _playersTab.SetParent(rectTransform, false);
                _playersTab.anchorMin        = new Vector2(0f, 0f);
                _playersTab.anchorMax        = new Vector2(1f, 1f);
                _playersTab.anchoredPosition = new Vector2(0f, 0f);
                _playersTab.sizeDelta        = new Vector2(0f, 0f);

                _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageUpButton")), _playersTab, 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, -18f);
                (_pageUpButton.transform as RectTransform).sizeDelta        = new Vector2(40f, 6f);
                _pageUpButton.interactable = true;
                _pageUpButton.onClick.AddListener(delegate()
                {
                    _playersTableView.PageScrollUp();
                });
                _pageUpButton.interactable = false;

                _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), _playersTab, 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, 6f);
                (_pageDownButton.transform as RectTransform).sizeDelta        = new Vector2(40f, 6f);
                _pageDownButton.interactable = true;
                _pageDownButton.onClick.AddListener(delegate()
                {
                    _playersTableView.PageScrollDown();
                });
                _pageDownButton.interactable = false;

                RectTransform container = new GameObject("Content", typeof(RectTransform)).transform as RectTransform;
                container.SetParent(_playersTab, false);
                container.anchorMin        = new Vector2(0.15f, 0.5f);
                container.anchorMax        = new Vector2(0.85f, 0.5f);
                container.sizeDelta        = new Vector2(0f, 49f);
                container.anchoredPosition = new Vector2(0f, -3f);

                _playersTableView = new GameObject("CustomTableView").AddComponent <TableView>();
                _playersTableView.gameObject.AddComponent <RectMask2D>();
                _playersTableView.transform.SetParent(container, false);

                _playersTableView.SetPrivateField("_isInitialized", false);
                _playersTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                _playersTableView.Init();

                (_playersTableView.transform as RectTransform).anchorMin        = new Vector2(0f, 0f);
                (_playersTableView.transform as RectTransform).anchorMax        = new Vector2(1f, 1f);
                (_playersTableView.transform as RectTransform).sizeDelta        = new Vector2(0f, 0f);
                (_playersTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f);

                ReflectionUtil.SetPrivateField(_playersTableView, "_pageUpButton", _pageUpButton);
                ReflectionUtil.SetPrivateField(_playersTableView, "_pageDownButton", _pageDownButton);

                _playersTableView.dataSource = this;
                #endregion

                _pingText           = this.CreateText("PING: 0", new Vector2(75f, 22.5f));
                _pingText.alignment = TextAlignmentOptions.Left;

                _tabControl_didSelectCellEvent(null, 0);
            }

            if (activationType == ActivationType.AddedToHierarchy)
            {
                SetGameplayModifiers(GameplayModifiers.defaultModifiers);
            }
        }
        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("QuitButton", 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);

                _leaderboardTableView = new GameObject("CustomTableView").AddComponent <TableView>();
                _leaderboardTableView.gameObject.AddComponent <RectMask2D>();
                _leaderboardTableView.transform.SetParent(container, false);

                _leaderboardTableView.SetPrivateField("_isInitialized", false);
                _leaderboardTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                _leaderboardTableView.Init();

                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)
            {
                _songTableCell = Instantiate(Resources.FindObjectsOfTypeAll <LevelListTableCell>().First(x => (x.name == "LevelListTableCell")));
                (_songTableCell.transform as RectTransform).anchoredPosition = new Vector2(18f, 39f);

                _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, -12f);
                (_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, 6f);
                (_pageDownButton.transform as RectTransform).sizeDelta        = new Vector2(40f, 6f);
                _pageDownButton.interactable = true;
                _pageDownButton.onClick.AddListener(delegate()
                {
                    _leaderboardTableView.PageScrollDown();
                });
                _pageDownButton.interactable = 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);

                _leaderboardTableView = new GameObject("CustomTableView").AddComponent <TableView>();
                _leaderboardTableView.gameObject.AddComponent <RectMask2D>();
                _leaderboardTableView.transform.SetParent(container, false);

                _leaderboardTableView.SetPrivateField("_isInitialized", false);
                _leaderboardTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                _leaderboardTableView.Init();

                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);
            }
        }
Ejemplo n.º 22
0
        protected override void DidActivate(bool firstActivation, ActivationType activationType)
        {
            if (firstActivation && activationType == ActivationType.AddedToHierarchy)
            {
                _downloadListTableCellInstance = Resources.FindObjectsOfTypeAll <LeaderboardTableCell>().First();

                _tabControl = BeatSaberUI.CreateTextSegmentedControl(rectTransform, new Vector2(0f, 31f), new Vector2(100f, 7f), _tabControl_didSelectCellEvent);
                _tabControl.SetTexts(new string[] { "Players", "Modifiers" });

                #region Modifiers tab

                _modifiersTab = new GameObject("ModifiersTab", typeof(RectTransform)).GetComponent <RectTransform>();
                _modifiersTab.SetParent(rectTransform, false);
                _modifiersTab.anchorMin        = new Vector2(0f, 0f);
                _modifiersTab.anchorMax        = new Vector2(1f, 1f);
                _modifiersTab.anchoredPosition = new Vector2(0f, 0f);
                _modifiersTab.sizeDelta        = new Vector2(0f, 0f);

                _modifiersPanel = Instantiate(Resources.FindObjectsOfTypeAll <GameplayModifiersPanelController>().First(), rectTransform, false);
                _modifiersPanel.SetData(GameplayModifiers.defaultModifiers);
                _modifiersPanel.gameObject.SetActive(true);
                _modifiersPanel.transform.SetParent(_modifiersTab, false);
                (_modifiersPanel.transform as RectTransform).anchorMin        = new Vector2(0.5f, 0f);
                (_modifiersPanel.transform as RectTransform).anchorMax        = new Vector2(0.5f, 1f);
                (_modifiersPanel.transform as RectTransform).anchoredPosition = new Vector2(0f, -23f);
                (_modifiersPanel.transform as RectTransform).sizeDelta        = new Vector2(120f, -23f);

                HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First();

                foreach (var hint in _modifiersPanel.GetComponentsInChildren <HoverHint>())
                {
                    hint.SetPrivateField("_hoverHintController", hoverHintController);
                }
                _modifiersPanel.Awake();

                var modifierToggles = _modifiersPanel.GetPrivateField <GameplayModifierToggle[]>("_gameplayModifierToggles");

                foreach (var item in modifierToggles)
                {
                    item.toggle.onValueChanged.AddListener((enabled) => {
                        Plugin.log.Info("Toggle changed");
                        gameplayModifiersChanged?.Invoke();
                    });
                }

                _modifiersPanelBlocker = new GameObject("ModifiersPanelBlocker", typeof(RectTransform)).GetComponent <RectTransform>(); //"If it works it's not stupid"
                _modifiersPanelBlocker.SetParent(_modifiersTab, false);
                _modifiersPanelBlocker.gameObject.AddComponent <UnityEngine.UI.Image>().color = new Color(0f, 0f, 0f, 0f);
                _modifiersPanelBlocker.anchorMin        = new Vector2(0f, 0f);
                _modifiersPanelBlocker.anchorMax        = new Vector2(1f, 0f);
                _modifiersPanelBlocker.pivot            = new Vector2(0.5f, 0f);
                _modifiersPanelBlocker.sizeDelta        = new Vector2(-10f, 62f);
                _modifiersPanelBlocker.anchoredPosition = new Vector2(0f, 0f);

                #endregion

                #region Players tab

                _playersTab = new GameObject("PlayersTab", typeof(RectTransform)).GetComponent <RectTransform>();
                _playersTab.SetParent(rectTransform, false);
                _playersTab.anchorMin        = new Vector2(0f, 0f);
                _playersTab.anchorMax        = new Vector2(1f, 1f);
                _playersTab.anchoredPosition = new Vector2(0f, 0f);
                _playersTab.sizeDelta        = new Vector2(0f, 0f);

                _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().Last(x => (x.name == "PageUpButton")), _playersTab, 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, -18.5f);
                (_pageUpButton.transform as RectTransform).sizeDelta        = new Vector2(40f, 6f);
                _pageUpButton.interactable = true;
                _pageUpButton.onClick.AddListener(delegate()
                {
                    _playersTableViewScroller.PageScrollUp();
                });
                _pageUpButton.interactable = false;

                _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), _playersTab, 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()
                {
                    _playersTableViewScroller.PageScrollDown();
                });
                _pageDownButton.interactable = false;

                RectTransform container = new GameObject("Content", typeof(RectTransform)).transform as RectTransform;
                container.SetParent(_playersTab, false);
                container.anchorMin        = new Vector2(0.15f, 0.5f);
                container.anchorMax        = new Vector2(0.85f, 0.5f);
                container.sizeDelta        = new Vector2(0f, 49f);
                container.anchoredPosition = new Vector2(0f, -3f);

                var tableGameObject = new GameObject("CustomTableView");
                tableGameObject.SetActive(false);
                _playersTableView = tableGameObject.AddComponent <TableView>();
                _playersTableView.gameObject.AddComponent <RectMask2D>();
                _playersTableView.transform.SetParent(container, false);

                _playersTableView.SetPrivateField("_isInitialized", false);
                _playersTableView.SetPrivateField("_preallocatedCells", new TableView.CellsGroup[0]);
                _playersTableView.SetPrivateField("_tableType", TableView.TableType.Vertical);

                var viewport = new GameObject("Viewport").AddComponent <RectTransform>();
                viewport.SetParent(tableGameObject.GetComponent <RectTransform>(), 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);
                tableGameObject.GetComponent <ScrollRect>().viewport = viewport;
                _playersTableView.Init();

                (_playersTableView.transform as RectTransform).anchorMin        = new Vector2(0f, 0f);
                (_playersTableView.transform as RectTransform).anchorMax        = new Vector2(1f, 1f);
                (_playersTableView.transform as RectTransform).sizeDelta        = new Vector2(0f, 0f);
                (_playersTableView.transform as RectTransform).anchoredPosition = new Vector3(0f, 0f);

                ReflectionUtil.SetPrivateField(_playersTableView, "_pageUpButton", _pageUpButton);
                ReflectionUtil.SetPrivateField(_playersTableView, "_pageDownButton", _pageDownButton);
                tableGameObject.SetActive(true);
                _playersTableViewScroller = _playersTableView.GetPrivateField <TableViewScroller>("_scroller");
                //_playersTableViewScroller.SetPrivateField("position", zero);
                _playersTableView.dataSource = this;
                #endregion

                _pingText           = this.CreateText("PING: 0", new Vector2(75f, 22.5f));
                _pingText.alignment = TextAlignmentOptions.Left;

                _tabControl_didSelectCellEvent(0);
            }
            else
            {
                for (int i = 0; i < _tableCells.Count; i++)
                {
                    Destroy(_tableCells[i].gameObject);
                }
                _tableCells.Clear();
                _playersTableView.ReloadData();
            }

            if (activationType == ActivationType.AddedToHierarchy)
            {
                StartCoroutine(ScrollWithDelay());
                SetGameplayModifiers(GameplayModifiers.defaultModifiers);
            }
        }