public void GetRooms()
        {
            try
            {
                NetworkClient.Start();

                Plugin.log.Debug($"Creating message...");
                NetOutgoingMessage outMsg = NetworkClient.CreateMessage();

                Version assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version;
                byte[]  version         = new byte[4] {
                    (byte)assemblyVersion.Major, (byte)assemblyVersion.Minor, (byte)assemblyVersion.Build, (byte)assemblyVersion.Revision
                };

                outMsg.Write(version);
                new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID()).AddToMessage(outMsg);

                Plugin.log.Debug($"Connecting to {channelInfos[0].ip}:{channelInfos[0].port}...");

                NetworkClient.Connect(channelInfos[0].ip, channelInfos[0].port, outMsg);
            }
            catch (Exception e)
            {
                ChannelException?.Invoke(this, e);
                Abort();
            }
        }
Пример #2
0
        public void Connect(string IP, int Port)
        {
            ip   = IP;
            port = Port;

            NetworkClient.Start();

            Misc.Logger.Info($"Creating message...");
            NetOutgoingMessage outMsg = NetworkClient.CreateMessage();

            Version assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version;

            byte[] version = new byte[4] {
                (byte)assemblyVersion.Major, (byte)assemblyVersion.Minor, (byte)assemblyVersion.Build, (byte)assemblyVersion.Revision
            };

            outMsg.Write(version);
            playerInfo = new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID());
            playerInfo.AddToMessage(outMsg);

            Misc.Logger.Info($"Connecting to {ip}:{port} with player name \"{playerInfo.playerName}\" and ID {playerInfo.playerId}");

            InRadioMode = false;
            InRoom      = false;

            NetworkClient.Connect(ip, port, outMsg);
        }
Пример #3
0
        public void GetRooms()
        {
            try
            {
                Task.Run(() =>
                {
                    NetworkClient.Start();

                    Plugin.log.Info($"Creating message...");
                    NetOutgoingMessage outMsg = NetworkClient.CreateMessage();

                    Version assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version;
                    byte[] version          = new byte[4] {
                        (byte)assemblyVersion.Major, (byte)assemblyVersion.Minor, (byte)assemblyVersion.Build, (byte)assemblyVersion.Revision
                    };

                    outMsg.Write(version);
                    new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID()).AddToMessage(outMsg);

                    Plugin.log.Info($"Connecting to {ip}:{port}...");

                    NetworkClient.Connect(ip, port, outMsg);
                }).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                ServerHubException?.Invoke(this, e);
                Abort();
            }
        }
Пример #4
0
        public void OnLevelChange()
        {
            GetUserInfo.UpdateUserInfo();

            if (_connection.Connected)
            {
                if (_loadedlevel > 2)
                {
                    StartCoroutine(WaitForControllers());



                    try
                    {
                        localPlayerInfo = new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID());

                        SendString(JsonUtility.ToJson(new ClientCommand(ClientCommandType.SetPlayerInfo, JsonUtility.ToJson(localPlayerInfo))));

                        DataReceived += ReceivedFromServer;
                        StartCoroutine(ReceiveFromServerCoroutine());

                        try
                        {
                            scoreScreen = new GameObject("ScoreScreen");
                            scoreScreen.transform.position = new Vector3(0f, 4f, 12f);
                            scoreScreen.transform.rotation = Quaternion.Euler(0f, 0f, 0f);

                            scoreDisplays.Clear();

                            for (int i = 0; i < 5; i++)
                            {
                                PlayerInfoDisplay buffer = new GameObject("ScoreDisplay").AddComponent <PlayerInfoDisplay>();
                                buffer.transform.SetParent(scoreScreen.transform);
                                buffer.transform.localPosition = new Vector3(0f, 2.5f - i, 0);

                                scoreDisplays.Add(buffer);
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("SCREEN EXCEPTION: " + e);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Can't connect to the server! Exception: " + e);
                    }
                }
                else if (_loadedlevel <= 1)
                {
                    DataReceived -= ReceivedFromServer;
                    DisconnectFromServer();
                    StartCoroutine(WaitForResults());
                }
            }
        }
Пример #5
0
        protected override void DidActivate(bool firstActivation, ActivationType activationType)
        {
            base.DidActivate(firstActivation, activationType);

            if (firstActivation)
            {
                _roomName     = $"{GetUserInfo.GetUserName()}'s room".ToUpper();
                _roomPassword = "";
            }

            _createRoomButton.interactable = PluginUI.instance.roomCreationFlowCoordinator.CheckRequirements();
            parserParams.EmitEvent("cancel");
        }
Пример #6
0
        public void Awake()
        {
            instance = this;
            DontDestroyOnLoad(this);
            GetUserInfo.UpdateUserInfo();
            playerInfo = new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID());
            NetPeerConfiguration Config = new NetPeerConfiguration("BeatSaberMultiplayer")
            {
                MaximumHandshakeAttempts = 2, AutoFlushSendQueue = false
            };

            NetworkClient = new NetClient(Config);
            ClientCreated?.Invoke();
        }
Пример #7
0
 private void OnMenuSceneLoadedFresh()
 {
     try
     {
         PluginUI.SetupLevelDetailClone();
         Settings.SetupSettings();
         SongCore.Loader.SongsLoadedEvent += Loader_SongsLoadedEvent;
         GetUserInfo.GetUserName();
     }
     catch (Exception e)
     {
         Plugin.log.Critical("Exception on fresh menu scene change: " + e);
     }
 }
Пример #8
0
        private void OnMenuSceneLoadedFresh()
        {
            try
            {
                PluginUI.Instance.OnLoad();
                VotingUI.Instance.OnLoad();
                SongListTweaks.Instance.OnLoad();

                GetUserInfo.GetUserName();
            }
            catch (Exception e)
            {
                Logger.Exception("Exception on fresh menu scene change: " + e);
            }
        }
Пример #9
0
        public void Connect(string IP, int Port)
        {
            ip   = IP;
            port = Port;

            NetworkClient.Start();

            Misc.Logger.Info($"Creating message...");
            NetOutgoingMessage outMsg = NetworkClient.CreateMessage();

            outMsg.Write(Plugin.pluginVersion);
            playerInfo = new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID());
            playerInfo.AddToMessage(outMsg);

            Misc.Logger.Info($"Connecting to {ip}:{port}...");

            NetworkClient.Connect(ip, port, outMsg);
        }
Пример #10
0
        public void Awake()
        {
            instance = this;
            DontDestroyOnLoad(this);
            GetUserInfo.UpdateUserInfo();
            playerInfo = new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID());
            NetPeerConfiguration Config = new NetPeerConfiguration("BeatSaberMultiplayer")
            {
                MaximumHandshakeAttempts = 2, AutoFlushSendQueue = false
            };

            NetworkClient = new NetClient(Config);

#if DEBUG
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
            WritePackets();
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
#endif
        }
        public void GetRooms()
        {
            try
            {
                NetworkClient.Start();

                Misc.Logger.Info($"Creating message...");
                NetOutgoingMessage outMsg = NetworkClient.CreateMessage();
                outMsg.Write(Plugin.pluginVersion);
                new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID()).AddToMessage(outMsg);

                Misc.Logger.Info($"Connecting to {channelInfos[0].ip}:{channelInfos[0].port}...");

                NetworkClient.Connect(channelInfos[0].ip, channelInfos[0].port, outMsg);
            }
            catch (Exception e)
            {
                ChannelException?.Invoke(this, e);
                Abort();
            }
        }
        internal static void ShowContributors()
        {
            Dictionary <string, string> contributors = new Dictionary <string, string>(ContributorsAndDonators.Contributors);
            string user = GetUserInfo.GetUserName();

            if (user == null)
            {
                user = "******";
            }
            if (contributors.ContainsKey(user))
            {
                contributors.Add($"{user}, again!", "For enjoying this mod!");
            }
            else
            {
                contributors.Add(user, "For enjoying this mod!");  //Teehee :)
            }
            ClearScreen();
            TextMeshProUGUI contributorLabel;

            contributorLabel           = BeatSaberUI.CreateText(rect, "Thanks to these contributors for, directly or indirectly, helping make Counters+ what it is!", Vector2.zero);
            contributorLabel.fontSize  = 3;
            contributorLabel.alignment = TextAlignmentOptions.Center;
            SetPositioning(contributorLabel.rectTransform, 0, 0.85f, 1, 0.166f, 0.5f);
            LoadedElements.Add(contributorLabel.gameObject);

            foreach (var kvp in contributors)
            {
                TextMeshProUGUI contributor = BeatSaberUI.CreateText(rect, $"<color=#00c0ff>{kvp.Key}</color> | {kvp.Value}", Vector2.zero);
                contributor.fontSize  = 3;
                contributor.alignment = TextAlignmentOptions.Left;
                SetPositioning(contributor.rectTransform, 0.05f,
                               0.8f - (contributors.Keys.ToList().IndexOf(kvp.Key) * 0.05f), 1, 0.166f, 0.5f);
                LoadedElements.Add(contributor.gameObject);
            }
        }
Пример #13
0
        protected override void DidActivate(bool firstActivation, ActivationType activationType)
        {
            if (firstActivation)
            {
                _backButton = BeatSaberUI.CreateBackButton(rectTransform);
                _backButton.onClick.AddListener(delegate() { didFinishEvent?.Invoke(); });

                _nameKeyboard = BeatSaberUI.CreateViewController <CustomKeyboardViewController>();
                _nameKeyboard.enterButtonPressed += NameEntered;
                _nameKeyboard.backButtonPressed  += () => { keyboardDidFinishEvent?.Invoke(_nameKeyboard); };

                _passwordKeyboard = BeatSaberUI.CreateViewController <CustomKeyboardViewController>();
                _passwordKeyboard.allowEmptyInput     = true;
                _passwordKeyboard.enterButtonPressed += PasswordEntered;
                _passwordKeyboard.backButtonPressed  += () => { keyboardDidFinishEvent?.Invoke(_passwordKeyboard); };

                _presetNameKeyboard = BeatSaberUI.CreateViewController <CustomKeyboardViewController>();
                _presetNameKeyboard.enterButtonPressed += PresetNameEntered;
                _presetNameKeyboard.backButtonPressed  += () => { keyboardDidFinishEvent?.Invoke(_presetNameKeyboard); };

                _usePasswordToggle = CustomSettingsHelper.AddToggleSetting <OnOffViewController>(rectTransform, "Use Password", new Vector2(0f, 11f));
                _usePasswordToggle.ValueChanged += UsePasswordToggle_ValueChanged;
                _usePasswordToggle.Value         = _usePassword;

                _songSelectionList = CustomSettingsHelper.AddListSetting <MultiplayerListViewController>(rectTransform, "Song Selection", new Vector2(0f, 3f));
                _songSelectionList.ValueChanged += SongSelection_ValueChanged;
                _songSelectionList.maxValue      = 1;
                _songSelectionList.Value         = (int)_songSelectionType;
                _songSelectionList.textForValues = new string[] { "Manual", "Random" };
                _songSelectionList.UpdateText();

                _maxPlayersList = CustomSettingsHelper.AddListSetting <MultiplayerListViewController>(rectTransform, "Max Players", new Vector2(0f, -5f));
                _maxPlayersList.ValueChanged += MaxPlayers_ValueChanged;
                _maxPlayersList.Value         = _maxPlayers;
                _maxPlayersList.maxValue      = 16;
                _maxPlayersList.textForValues = new string[] { "No limit" };
                _maxPlayersList.UpdateText();

                _resultsShowTimeList = CustomSettingsHelper.AddListSetting <MultiplayerListViewController>(rectTransform, "Results Show Time", new Vector2(0f, -13f));
                _resultsShowTimeList.ValueChanged += ResultsShowTime_ValueChanged;
                _resultsShowTimeList.minValue      = 5;
                _resultsShowTimeList.maxValue      = 45;
                _resultsShowTimeList.Value         = _resultsShowTime;

                _perPlayerDifficultyToggle = CustomSettingsHelper.AddToggleSetting <OnOffViewController>(rectTransform, "Per player difficulty", new Vector2(0f, -21f));
                _perPlayerDifficultyToggle.ValueChanged += PerPlayerDifficultyToggle_ValueChanged;
                _perPlayerDifficultyToggle.Value         = _allowPerPlayerDifficulty;

                _roomName          = $"{GetUserInfo.GetUserName()}'s room".ToUpper();
                _nameText          = BeatSaberUI.CreateText(rectTransform, _roomName, new Vector2(-22.5f, 30f));
                _nameText.fontSize = 5f;

                _editNameButton = BeatSaberUI.CreateUIButton(rectTransform, "CancelButton");
                _editNameButton.SetButtonText("EDIT NAME");
                (_editNameButton.transform as RectTransform).sizeDelta        = new Vector2(34f, 8f);
                (_editNameButton.transform as RectTransform).anchoredPosition = new Vector2(34f, 32f);
                _editNameButton.onClick.RemoveAllListeners();
                _editNameButton.onClick.AddListener(delegate()
                {
                    _nameKeyboard.inputString = _roomName;
                    presentKeyboardEvent?.Invoke(_nameKeyboard);
                });

                _roomPassword          = "";
                _passwordText          = BeatSaberUI.CreateText(rectTransform, "ENTER PASSWORD", new Vector2(-22.5f, 20f));
                _passwordText.fontSize = 5f;

                _editPasswordButton = BeatSaberUI.CreateUIButton(rectTransform, "CancelButton");
                _editPasswordButton.SetButtonText("EDIT PASS");
                (_editPasswordButton.transform as RectTransform).sizeDelta        = new Vector2(34f, 8f);
                (_editPasswordButton.transform as RectTransform).anchoredPosition = new Vector2(34f, 22f);
                _editPasswordButton.onClick.RemoveAllListeners();
                _editPasswordButton.onClick.AddListener(delegate()
                {
                    _passwordKeyboard.inputString = _roomPassword;
                    presentKeyboardEvent?.Invoke(_passwordKeyboard);
                });

                _createRoomButton = BeatSaberUI.CreateUIButton(rectTransform, "CancelButton");
                _createRoomButton.SetButtonText("Create Room");
                (_createRoomButton.transform as RectTransform).sizeDelta        = new Vector2(30f, 10f);
                (_createRoomButton.transform as RectTransform).anchoredPosition = new Vector2(0f, -32.5f);
                _createRoomButton.onClick.RemoveAllListeners();
                _createRoomButton.onClick.AddListener(delegate() {
                    CreatedRoom?.Invoke(new RoomSettings()
                    {
                        Name = _roomName, UsePassword = _usePassword, Password = _roomPassword, PerPlayerDifficulty = _allowPerPlayerDifficulty, MaxPlayers = _maxPlayers, SelectionType = _songSelectionType, ResultsShowTime = _resultsShowTime
                    });
                });
                _createRoomButton.interactable = PluginUI.instance.roomCreationFlowCoordinator.CheckRequirements();

                _savePresetButton = BeatSaberUI.CreateUIButton(rectTransform, "CancelButton");
                _savePresetButton.SetButtonText("Save Preset");
                (_savePresetButton.transform as RectTransform).sizeDelta        = new Vector2(30f, 10f);
                (_savePresetButton.transform as RectTransform).anchoredPosition = new Vector2(-32f, -32.5f);
                _savePresetButton.onClick.RemoveAllListeners();
                _savePresetButton.onClick.AddListener(delegate() {
                    _presetNameKeyboard.inputString = "NEW PRESET";
                    presentKeyboardEvent?.Invoke(_presetNameKeyboard);
                });

                _loadPresetButton = BeatSaberUI.CreateUIButton(rectTransform, "CancelButton");
                _loadPresetButton.SetButtonText("Load Preset");
                (_loadPresetButton.transform as RectTransform).sizeDelta        = new Vector2(30f, 10f);
                (_loadPresetButton.transform as RectTransform).anchoredPosition = new Vector2(32f, -32.5f);
                _loadPresetButton.onClick.RemoveAllListeners();
                _loadPresetButton.onClick.AddListener(delegate() {
                    LoadPresetPressed?.Invoke();
                });
            }
            else
            {
                _songSelectionList.textForValues = new string[] { "Manual", "Random" };
                _songSelectionList.UpdateText();
                _maxPlayersList.textForValues = new string[] { "No limit" };
                _maxPlayersList.UpdateText();
                _createRoomButton.interactable = PluginUI.instance.roomCreationFlowCoordinator.CheckRequirements();
            }
        }
Пример #14
0
 public string GetUserName()
 {
     return(GetUserInfo.GetUserName());
 }
        private void CreateOnlineButton()
        {
            _newVersionText             = BeatSaberUI.CreateText(_mainMenuRectTransform, "A new version of the mod\nis available!", new Vector2(55.5f, 33f));
            _newVersionText.fontSize    = 5f;
            _newVersionText.lineSpacing = -52;
            _newVersionText.gameObject.SetActive(false);

            Button[] mainButtons = Resources.FindObjectsOfTypeAll <RectTransform>().First(x => x.name == "MainButtons" && x.parent.name == "MainMenuViewController").GetComponentsInChildren <Button>();

            foreach (var item in mainButtons)
            {
                (item.transform as RectTransform).sizeDelta = new Vector2(35f, 30f);
            }

            _multiplayerButton = BeatSaberUI.CreateUIButton(_mainMenuRectTransform, "SoloFreePlayButton");
            Destroy(_multiplayerButton.GetComponentInChildren <LocalizedTextMeshProUGUI>());
            Destroy(_multiplayerButton.GetComponentInChildren <HoverHint>());
            _multiplayerButton.transform.SetParent(mainButtons.First(x => x.name == "SoloFreePlayButton").transform.parent);
            _multiplayerButton.transform.SetAsLastSibling();

            _multiplayerButton.SetButtonText("Online");
            _multiplayerButton.SetButtonIcon(Sprites.onlineIcon);
            BeatSaberUI.AddHintText(_multiplayerButton.transform as RectTransform, "Play with your friends online!");

            _multiplayerButton.onClick.AddListener(delegate()
            {
                try
                {
                    MainFlowCoordinator mainFlow = Resources.FindObjectsOfTypeAll <MainFlowCoordinator>().First();

                    if (_noUserInfoWarning == null)
                    {
                        var dialogOrig     = ReflectionUtil.GetPrivateField <SimpleDialogPromptViewController>(mainFlow, "_simpleDialogPromptViewController");
                        _noUserInfoWarning = Instantiate(dialogOrig.gameObject).GetComponent <SimpleDialogPromptViewController>();
                    }

                    if (GetUserInfo.GetUserID() == 0 && string.IsNullOrWhiteSpace(GetUserInfo.GetUserName()) || GetUserInfo.GetUserID() == 0)
                    {
                        _noUserInfoWarning.Init("Invalid username and ID", $"Your username and ID are invalid\nMake sure you are logged in", "Go back", "Continue anyway",
                                                (selectedButton) =>
                        {
                            mainFlow.InvokeMethod("DismissViewController", _noUserInfoWarning, null, selectedButton == 1);
                            if (selectedButton == 1)
                            {
                                mainFlow.InvokeMethod("PresentFlowCoordinator", modeSelectionFlowCoordinator, null, true, false);
                            }
                        });

                        mainFlow.InvokeMethod("PresentViewController", _noUserInfoWarning, null, false);
                    }
                    else
                    {
                        mainFlow.InvokeMethod("PresentFlowCoordinator", modeSelectionFlowCoordinator, null, false, false);
                    }
                }
                catch (Exception e)
                {
                    Plugin.log.Critical($"Unable to present flow coordinator! Exception: {e}");
                }
            });
        }
Пример #16
0
        public IEnumerator PostReview(float funFactor, float rhythm, float flow, float patternQuality, float readability, float levelQuality)
        {
            yield return(null);

            BeastSaberReview review = new BeastSaberReview(GetUserInfo.GetUserName(), funFactor, rhythm, flow, patternQuality, readability, levelQuality);

            _reviewViewController.SetSubmitButtonState(true, false);
            _reviewViewController.SetStatusText(false, "");

            UnityWebRequest voteWWW = new UnityWebRequest($"https://bsaber.com/wp-json/bsaber-api/songs/{songkey}/reviews");

            voteWWW.method          = "POST";
            voteWWW.uploadHandler   = new UploadHandlerRaw(Encoding.UTF8.GetBytes(JsonUtility.ToJson(review)));
            voteWWW.downloadHandler = new DownloadHandlerBuffer();
            voteWWW.SetRequestHeader("Content-Type", "application/json");
            voteWWW.timeout = 30;
            yield return(voteWWW.SendWebRequest());

            if (voteWWW.isNetworkError)
            {
                Misc.Logger.Error(voteWWW.error);
                _reviewViewController.SetSubmitButtonState(true, true);
                _reviewViewController.SetStatusText(false, "");
            }
            else
            {
                switch (voteWWW.responseCode)
                {
                case 200:
                {
                    JSONNode node = JSON.Parse(voteWWW.downloadHandler.text);

                    if (node["success"])
                    {
                        Misc.Logger.Log("Success!");

                        if (!PluginConfig.reviewedSongs.ContainsKey(levelId.Substring(0, 32)))
                        {
                            PluginConfig.reviewedSongs.Add(levelId.Substring(0, 32), new SongReview(songkey, funFactor, rhythm, flow, patternQuality, readability, levelQuality));
                            PluginConfig.SaveConfig();
                        }
                        else
                        {
                            PluginConfig.reviewedSongs[levelId.Substring(0, 32)] = new SongReview(songkey, funFactor, rhythm, flow, patternQuality, readability, levelQuality);
                            PluginConfig.SaveConfig();
                        }

                        _reviewViewController.SetSubmitButtonState(false, false);
                        _reviewViewController.SetStatusText(true, "<color=green>Success!");
                    }
                    else
                    {
                        Misc.Logger.Error("Something went wrong...\n Response: " + voteWWW.downloadHandler.text);
                        _reviewViewController.SetSubmitButtonState(true, true);
                        _reviewViewController.SetStatusText(false, "");
                    }
                }; break;

                default:
                {
                    Misc.Logger.Error("Error: " + voteWWW.responseCode + "\nResponse: " + voteWWW.downloadHandler.text);
                    _reviewViewController.SetSubmitButtonState(true, true);
                    _reviewViewController.SetStatusText(false, "");
                }; break;
                }
            }
        }
Пример #17
0
        protected override void DidActivate()
        {
            ui              = BSMultiplayerUI._instance;
            _songLoader     = FindObjectOfType <SongLoader>();
            localPlayerInfo = new PlayerInfo(GetUserInfo.GetUserName(), GetUserInfo.GetUserID());

            if (_songPreviewPlayer == null)
            {
                ObjectProvider[] providers = Resources.FindObjectsOfTypeAll <ObjectProvider>().Where(x => x.name == "SongPreviewPlayerProvider").ToArray();

                if (providers.Length > 0)
                {
                    _songPreviewPlayer = providers[0].GetProvidedObject <SongPreviewPlayer>();
                }
            }

            if (_backButton == null)
            {
                _backButton = ui.CreateBackButton(rectTransform);

                _backButton.onClick.AddListener(delegate()
                {
                    BSMultiplayerClient._instance.DataReceived -= DataReceived;
                    BSMultiplayerClient._instance.DisconnectFromServer();
                    _songPreviewPlayer.CrossfadeToDefault();
                    try
                    {
                        transform.parent.GetComponent <MultiplayerServerHubViewController>().UpdatePage();
                    } catch (Exception e)
                    {
                        Console.WriteLine($"ServerHub exception: {e}");
                    }
                    foreach (AvatarController avatar in _avatars)
                    {
                        Destroy(avatar.gameObject);
                    }
                    DismissModalViewController(null, false);
                });
            }

            if (_timerText == null)
            {
                _timerText           = ui.CreateText(rectTransform, "", new Vector2(0f, -5f));
                _timerText.fontSize  = 8f;
                _timerText.alignment = TextAlignmentOptions.Center;
                _timerText.rectTransform.sizeDelta = new Vector2(20f, 6f);
            }

            if (_selectText == null)
            {
                _selectText           = ui.CreateText(rectTransform, "", new Vector2(0f, -36f));
                _selectText.fontSize  = 7f;
                _selectText.alignment = TextAlignmentOptions.Center;
                _selectText.rectTransform.sizeDelta = new Vector2(120f, 6f);
            }

            if (_loadingIndicator == null)
            {
                try
                {
                    _loadingIndicator = ui.CreateLoadingIndicator(rectTransform);
                    (_loadingIndicator.transform as RectTransform).anchorMin        = new Vector2(0.5f, 0.5f);
                    (_loadingIndicator.transform as RectTransform).anchorMax        = new Vector2(0.5f, 0.5f);
                    (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(0f, 0f);
                    _loadingIndicator.SetActive(true);
                }
                catch (Exception e)
                {
                    Console.WriteLine("EXCEPTION: " + e);
                }
            }

            if (_selectedSongCell == null)
            {
                _selectedSongCell = Instantiate(Resources.FindObjectsOfTypeAll <SongListTableCell>().First(x => x.name == "SongListTableCell"), rectTransform, false);

                (_selectedSongCell.transform as RectTransform).anchorMin        = new Vector2(0.5f, 0.5f);
                (_selectedSongCell.transform as RectTransform).anchorMax        = new Vector2(0.5f, 0.5f);
                (_selectedSongCell.transform as RectTransform).anchoredPosition = new Vector2(-25f, 0);

                _selectedSongCell.gameObject.SetActive(false);
            }
            else
            {
                _selectedSongCell.gameObject.SetActive(false);
            }

            if (_multiplayerLeaderboard == null)
            {
                _multiplayerLeaderboard = ui.CreateViewController <MultiplayerLeaderboardViewController>();
                _multiplayerLeaderboard.rectTransform.anchorMin = new Vector2(0.3f, 0f);
                _multiplayerLeaderboard.rectTransform.anchorMax = new Vector2(0.7f, 1f);

                PushViewController(_multiplayerLeaderboard, true);
            }
            else
            {
                if (_viewControllers.IndexOf(_multiplayerLeaderboard) < 0)
                {
                    PushViewController(_multiplayerLeaderboard, true);
                }
            }

            Console.WriteLine($"Connecting to {selectedServerIP}:{selectedServerPort}");
            if (BSMultiplayerClient._instance.ConnectToServer(selectedServerIP, selectedServerPort))
            {
                BSMultiplayerClient._instance.SendString(JsonUtility.ToJson(new ClientCommand(ClientCommandType.GetServerState)));
                BSMultiplayerClient._instance.SendString(JsonUtility.ToJson(new ClientCommand(ClientCommandType.GetAvailableSongs)));
                StartCoroutine(BSMultiplayerClient._instance.ReceiveFromServerCoroutine());
                BSMultiplayerClient._instance.DataReceived += DataReceived;
            }
            else
            {
                _loading = false;
                TextMeshProUGUI _errorText = ui.CreateText(rectTransform, String.Format("Can't connect to server!"), new Vector2(0f, -48f));
                _errorText.alignment = TextAlignmentOptions.Center;
                Destroy(_errorText.gameObject, 5f);
            }
        }
Пример #18
0
        protected override void DidActivate(bool firstActivation, ActivationType activationType)
        {
            if (firstActivation && activationType == ActivationType.AddedToHierarchy)
            {
                _backButton = BeatSaberUI.CreateBackButton(rectTransform);
                _backButton.onClick.AddListener(delegate() { didFinishEvent?.Invoke(); });

                _nameKeyboard = BeatSaberUI.CreateViewController <CustomKeyboardViewController>();
                _nameKeyboard.enterButtonPressed += NameEntered;
                _nameKeyboard.backButtonPressed  += () => { keyboardDidFinishEvent?.Invoke(_nameKeyboard); };
                _passwordKeyboard = BeatSaberUI.CreateViewController <CustomKeyboardViewController>();
                _passwordKeyboard.enterButtonPressed += PasswordEntered;
                _passwordKeyboard.backButtonPressed  += () => { keyboardDidFinishEvent?.Invoke(_passwordKeyboard); };
                _presetNameKeyboard = BeatSaberUI.CreateViewController <CustomKeyboardViewController>();
                _presetNameKeyboard.enterButtonPressed += PresetNameEntered;
                _presetNameKeyboard.backButtonPressed  += () => { keyboardDidFinishEvent?.Invoke(_presetNameKeyboard); };

                _usePasswordToggle = CustomSettingsHelper.AddToggleSetting <OnOffViewController>(rectTransform, "Use Password");
                (_usePasswordToggle.transform as RectTransform).anchorMin        = new Vector2(0.5f, 0.5f);
                (_usePasswordToggle.transform as RectTransform).anchorMax        = new Vector2(0.5f, 0.5f);
                (_usePasswordToggle.transform as RectTransform).anchoredPosition = new Vector2(0f, 10f);
                _usePasswordToggle.ValueChanged += UsePasswordToggle_ValueChanged;
                _usePasswordToggle.Value         = _usePassword;

                _songSelectionList = CustomSettingsHelper.AddListSetting <MultiplayerListViewController>(rectTransform, "Song Selection");
                (_songSelectionList.transform as RectTransform).anchorMin        = new Vector2(0.5f, 0.5f);
                (_songSelectionList.transform as RectTransform).anchorMax        = new Vector2(0.5f, 0.5f);
                (_songSelectionList.transform as RectTransform).anchoredPosition = new Vector2(0f, 0f);
                _songSelectionList.ValueChanged += SongSelection_ValueChanged;
                _songSelectionList.maxValue      = 2;
                _songSelectionList.Value         = (int)_songSelectionType;
                _songSelectionList.textForValues = new string[] { "Manual", "Random", "Voting" };
                _songSelectionList.UpdateText();

                _maxPlayersList = CustomSettingsHelper.AddListSetting <MultiplayerListViewController>(rectTransform, "Max Players");
                (_maxPlayersList.transform as RectTransform).anchorMin        = new Vector2(0.5f, 0.5f);
                (_maxPlayersList.transform as RectTransform).anchorMax        = new Vector2(0.5f, 0.5f);
                (_maxPlayersList.transform as RectTransform).anchoredPosition = new Vector2(0f, -10f);
                _maxPlayersList.ValueChanged += MaxPlayers_ValueChanged;
                _maxPlayersList.Value         = _maxPlayers;
                _maxPlayersList.maxValue      = 16;

                _noFailToggle = CustomSettingsHelper.AddToggleSetting <OnOffViewController>(rectTransform, "No Fail Mode");
                (_noFailToggle.transform as RectTransform).anchorMin        = new Vector2(0.5f, 0.5f);
                (_noFailToggle.transform as RectTransform).anchorMax        = new Vector2(0.5f, 0.5f);
                (_noFailToggle.transform as RectTransform).anchoredPosition = new Vector2(0f, -20f);
                _noFailToggle.ValueChanged += NoFailToggle_ValueChanged;
                _noFailToggle.Value         = _noFailMode;

                _roomName          = $"{GetUserInfo.GetUserName()}'s room".ToUpper();
                _nameText          = BeatSaberUI.CreateText(rectTransform, _roomName, new Vector2(-22.5f, 25f));
                _nameText.fontSize = 5f;

                _editNameButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton");
                _editNameButton.SetButtonText("EDIT NAME");
                (_editNameButton.transform as RectTransform).sizeDelta        = new Vector2(34f, 8f);
                (_editNameButton.transform as RectTransform).anchoredPosition = new Vector2(34f, 25f);
                _editNameButton.onClick.RemoveAllListeners();
                _editNameButton.onClick.AddListener(delegate()
                {
                    _nameKeyboard.inputString = _roomName;
                    PluginUI.instance.roomCreationFlowCoordinator.PresentKeyboard(_nameKeyboard);
                });

                _roomPassword          = "";
                _passwordText          = BeatSaberUI.CreateText(rectTransform, "ENTER PASSWORD", new Vector2(-22.5f, 15f));
                _passwordText.fontSize = 5f;

                _editPasswordButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton");
                _editPasswordButton.SetButtonText("EDIT PASS");
                (_editPasswordButton.transform as RectTransform).sizeDelta        = new Vector2(34f, 8f);
                (_editPasswordButton.transform as RectTransform).anchoredPosition = new Vector2(34f, 15f);
                _editPasswordButton.onClick.RemoveAllListeners();
                _editPasswordButton.onClick.AddListener(delegate()
                {
                    _passwordKeyboard.inputString = _roomPassword;
                    PluginUI.instance.roomCreationFlowCoordinator.PresentKeyboard(_passwordKeyboard);
                });

                _createRoomButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton");
                _createRoomButton.SetButtonText("Create Room");
                (_createRoomButton.transform as RectTransform).sizeDelta        = new Vector2(30f, 10f);
                (_createRoomButton.transform as RectTransform).anchoredPosition = new Vector2(0f, -32.5f);
                _createRoomButton.onClick.RemoveAllListeners();
                _createRoomButton.onClick.AddListener(delegate() {
                    CreatedRoom?.Invoke(new RoomSettings()
                    {
                        Name = _roomName, UsePassword = _usePassword, Password = _roomPassword, NoFail = _noFailMode, MaxPlayers = _maxPlayers, SelectionType = _songSelectionType
                    });
                });
                _createRoomButton.interactable = PluginUI.instance.roomCreationFlowCoordinator.CheckRequirements();

                _savePresetButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton");
                _savePresetButton.SetButtonText("Save Preset");
                (_savePresetButton.transform as RectTransform).sizeDelta        = new Vector2(30f, 10f);
                (_savePresetButton.transform as RectTransform).anchoredPosition = new Vector2(-32f, -32.5f);
                _savePresetButton.onClick.RemoveAllListeners();
                _savePresetButton.onClick.AddListener(delegate() {
                    _presetNameKeyboard.inputString = "NEW PRESET";
                    PluginUI.instance.roomCreationFlowCoordinator.PresentKeyboard(_presetNameKeyboard);
                });

                _loadPresetButton = BeatSaberUI.CreateUIButton(rectTransform, "CreditsButton");
                _loadPresetButton.SetButtonText("Load Preset");
                (_loadPresetButton.transform as RectTransform).sizeDelta        = new Vector2(30f, 10f);
                (_loadPresetButton.transform as RectTransform).anchoredPosition = new Vector2(32f, -32.5f);
                _loadPresetButton.onClick.RemoveAllListeners();
                _loadPresetButton.onClick.AddListener(delegate() {
                    LoadPresetPressed?.Invoke();
                });
            }
            else
            {
                _songSelectionList.textForValues = new string[] { "Manual", "Random", "Voting" };
                _songSelectionList.UpdateText();
                _createRoomButton.interactable = PluginUI.instance.roomCreationFlowCoordinator.CheckRequirements();
            }
        }