Example #1
0
 public async Task SelectCard(SelectCardEvent cardEvent)
 {
     await _games.SelectCard(Context.Items["room"]?.ToString(), Room, Context.ConnectionId, cardEvent);
 }
Example #2
0
 public async Task SelectCard(SelectCardEvent card) => await _signalr.HubConnection.SendAsync("SelectCard", card);
Example #3
0
        public async Task SelectCard(string roomId, RoomModel room, string connectionid, SelectCardEvent cardEvent)
        {
            UserModel user = await Task.FromResult(room.Users.FirstOrDefault(u => u.Token == connectionid));

            if (user == null || !room.Game.Waiting.Contains(user.Id) || user.CardDeck.FirstOrDefault(c => c.Id == cardEvent.Card.Id) == null)
            {
                return;
            }
            CardOnTableModel card = new()
            {
                Id             = Guid.NewGuid().ToString(),
                Card           = cardEvent.Card,
                UserId         = user.Id,
                IsNarratorCard = false
            };

            if (room.Game.State == GameState.NarratorPicking && connectionid == room.Game.Narrator.Token)
            {
                room.Game.CardsOnTable.Clear();
                room.Game.Clue      = cardEvent.Clue;
                card.IsNarratorCard = true;
            }

            room.Game.Waiting.Remove(user.Id);
            room.Game.CardsOnTable.Add(card);
            room.Game.CardsOnTableCount = room.Game.CardsOnTable.Count;
            user.CardDeck.Remove(cardEvent.Card);
            await RefillUserCard(user, room.Game.RNG);

            if (room.Game.Waiting.Count == 0)
            {
                if (room.Game.State == GameState.UsersPicking)
                {
                    await ShowCards(room);
                }
                if (room.Game.State == GameState.NarratorPicking)
                {
                    await UsersPickingState(room, user.Id);
                }
            }

            await _rooms.Save(roomId, room);

            if (room.Game.State != GameState.UsersVoting)
            {
                room.Game.CardsOnTable.Clear();
            }
            await _hub.Clients.Client(connectionid).SendAsync("TakeCard", card.Card);

            await _hub.Clients.Group(roomId).SendAsync("UpdateGameState", room.Game);
        }