예제 #1
0
        private void ShowScore(Game game)
        {
            if (game != null)
            {
                var players = new List<PlayerViewModel>();

                if (game.PlayerGames != null)
                {
                    foreach (var pg in game.PlayerGames)
                    {
                        var pvm = new PlayerViewModel()
                        {
                            Id = pg.PlayerId,
                            Name = pg.Player.DisplayName,
                            Sets = new List<List<Card>>()
                        };

                        for (int i = 0; i < pg.Score; i++)
                        {
                            var cardList = new List<Card>()
                                            {
                                                new Card(),
                                                new Card(),
                                                new Card()
                                            };
                            pvm.Sets.Add(cardList);
                        }

                        players.Add(pvm);
                    }
                }

                Clients.Caller.displayFinishedGame(players, game.TotalSeconds);
            }
        }
예제 #2
0
        public async Task JoinGame(int gameId)
        {
            var userId = Context.User.Identity.GetUserId<int>();

            if (games.Keys.Contains("Game" + gameId))
            {
                var game = games["Game" + gameId];

                await Groups.Add(Context.ConnectionId, "Game" + gameId);

                foreach (var player in game.Players.Where(p => p.Id != userId))
                {
                    Clients.Caller.playerJoin(new PlayerViewModel() { Id = player.Id, Name = player.Name, Sets = player.Sets });
                }

                var currentPlayer = game.Players.FirstOrDefault(p => p.Id == userId);

                if (currentPlayer != null)
                {
                    Clients.OthersInGroup("Game" + gameId).playerReconnected(userId);

                    ResendGame(game, currentPlayer);
                }
                else
                {
                    if (game.StateId == 0) //only add players if the game hasn't started
                    {
                        var user = setRepo.FindPlayer(userId);
                        var pvm = new PlayerViewModel() { Id = user.Id, Name = user.DisplayName };
                        game.Players.Add(pvm);
                        Clients.OthersInGroup("Game" + gameId).playerJoin(pvm);
                    }
                    else
                    {
                        //spectate
                        Clients.Caller.spectate(new GameState() { id = game.StateId, cards = game.TotalSet });
                        if (game.IsPaused)
                        {
                            Clients.Caller.pauseGame();
                        }
                    }
                }

                var seconds = game.IsPaused
                                ? game.Timer.SecondsElapsed
                                : game.Timer.GetCurrentSecondsElapsed();

                Clients.Caller.setTime(seconds);
            }
            else
            {
                var game = setRepo.FindGame(gameId);

                //if exists, show score
                if (game != null)
                {
                    ShowScore(game);
                }
                else //show error message 
                {

                }
            }
        }
예제 #3
0
 private void ResendGame(SetGame game, PlayerViewModel currentPlayer)
 {
     if (game.StateId > 0)
     {
         Clients.Caller.sendSets(currentPlayer.Sets);
         Clients.Caller.startNextState(new GameState() { id = game.StateId, cards = game.TotalSet });
         if (game.IsPaused)
         {
             Clients.Caller.pauseGame();
         }
     }
 }