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