Пример #1
0
 // Start is called before the first frame update
 private void Awake()
 {
     if (MultiPlayerSettings.multiPlayerSettings == null)
     {
         MultiPlayerSettings.multiPlayerSettings = this;
     }
     else
     {
         if (MultiPlayerSettings.multiPlayerSettings != this)
         {
             Destroy(this.gameObject);
         }
     }
     DontDestroyOnLoad(this.gameObject);
 }
Пример #2
0
        public async void Multiplayer_Tapped(object sender, EventArgs e)
        {
            BGMusics.Clicking_Sound().Play();
            BGMusics.Menu_BGM().Stop();
            BGMusics.InGame_BGM().Play();
            Flow.GetPlayerMode(true);
            SaveOrLoad.ALoadedGame(false);
            if (TapCounter > 1)
            {
                return;
            }
            LoadingBit.IsVisible = true;
            Fetch.IsRunning      = true;
            string CacheEmail    = Application.Current.Properties["UserEmail"].ToString();
            string CachePassword = Application.Current.Properties["UserPassword"].ToString();

            try
            {
                if (string.IsNullOrEmpty(CacheEmail) || string.IsNullOrEmpty(CachePassword))
                {
                    await DisplayAlert("No Account", "Please Log in", "OK");

                    LoadingBit.IsVisible = false;
                    Fetch.IsRunning      = false;
                    return;
                }
                var link = await apiClient.LoginEmailPasswordAsync(CacheEmail, CachePassword);

                var userdata = await apiClient.GetUserAsync(link.User.LocalId);
            }
            catch (Exception ex)
            {
                LoadingBit.IsVisible = false;
                Fetch.IsRunning      = false;
                await DisplayAlert("No Account", "Please Log in", "OK");

                return;
            }
            if (string.IsNullOrEmpty(UserData.GetUserLabel()))
            {
                LoadingBit.IsVisible = false;
                Fetch.IsRunning      = false;
                await DisplayAlert("No Account", "Please Log in", "OK");

                return;
            }

            try
            {
                me.UserName = UserData.GetUserLabel()?.Trim();

                me.UserId = Application.Current.Properties["UserId"].ToString();


                lblMessages.Text = "Getting connection info...";

                SignalRConnectionInfo connectionInfo = await SignalRService.GetSignalRConnectionInfo();

                var url = connectionInfo.Url;
                lblMessages.Text = $"Connecting...";

                connection = new HubConnectionBuilder()
                             .WithUrl(url, options =>
                {
                    options.AccessTokenProvider = () => Task.FromResult(connectionInfo.AccessToken);
                })
                             .Build();

                //connection.Closed += async (error) =>
                //{
                //    //Optional code: only used for retrying to connect
                //    //await Task.Delay(new Random().Next(0, 5) * 1000);
                //    //await connection.StartAsync();
                //};
                #region Connection
                //Waiting for other player
                connection.On <GamePlayer>("waiting", (player) =>
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        if (player.UserId == me.UserId)
                        {
                            Fetch.IsRunning  = true;
                            lblMessages.Text = "Waiting for players...";
                        }
                    });
                });

                //2 player game successfully created (method name MUST be 'newgame'
                connection.On <GameInfo>("newgame", (info) =>
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        gameInfo          = info;
                        var currentPlayer = info.Players.Find(x => x.UserId == me.UserId);
                        if (currentPlayer.PlayerNumber == 1)
                        {
                            isPlayer1 = true;
                            ///      btnStartTimer.IsEnabled = true;
                        }
                        else
                        {
                            isPlayer1 = false;
                            //         btnStartTimer.IsEnabled = false;
                        }

                        MultiPlayerSettings.IsThisPlayer1(isPlayer1);
                        //Fill label with game content
                        //      lblGameContent.Text = $"Room Id: {info.RoomId}{Environment.NewLine}Player 1: {info.Players[0].UserName}{Environment.NewLine}Player 2: {info.Players[1].UserName}{Environment.NewLine}Toks:{Environment.NewLine}";
                        lblMessages.Text = $"Room Id: {info.RoomId}{Environment.NewLine}Player 1: {info.Players[0].UserName}{Environment.NewLine}Player 2: {info.Players[1].UserName}{Environment.NewLine}Toks:{Environment.NewLine}";
                        if (MultiPlayerSettings.YupThisIsPlayer1())
                        {
                            MultiPlayerSettings.OtherPlayersData(info.Players[1].UserName, info.Players[1].UserPhoto);
                        }
                        else
                        {
                            MultiPlayerSettings.OtherPlayersData(info.Players[0].UserName, info.Players[0].UserPhoto);
                        }
                        for (int i = 0; i < info.Toks.Count; ++i)
                        {
                            mainv.OnlineQoutes.Add(new OnlineQoutes()
                            {
                                QouteID      = info.Toks[i].Id,
                                QoutePhrase  = info.Toks[i].PrimaryFieldText,
                                QoutesSource = info.Toks[i].SecondaryFieldText,
                                Category     = info.Toks[i].Category
                            });
                        }
                        MultiPlayerSettings.GetGameInfo(gameInfo);
                        Selection.GetOnlineList(mainv.OnlineQoutes);
                        var navPage = new NavigationPage(new Blank2());
                        Application.Current.MainPage = navPage;
                    });
                });
                #endregion

                BGMusics.Loading_Sound().Play();
                await connection.StartAsync();

                Fetch.IsRunning  = false;
                lblMessages.Text = $"Connected.";
                await SignalRService.MultiplayerSetup(me);

                Btn_Find.IsVisible = true;
            }
            catch (Exception ex)
            {
                //        lblMessages.Text = ex.Message;
                await DisplayAlert("Error", ex.ToString(), "Ok");
            }


            /*
             * var navPage = new NavigationPage(new Multiplayer());
             * await Task.Delay(200);
             * await navPage.FadeTo(0, 250);
             * await Task.Delay(200);
             * await navPage.FadeTo(1, 250);
             * Application.Current.MainPage = navPage;
             *
             */
        }