Example #1
0
        private async Task SetScore(RoomModel room)
        {
            CardOnTableModel narratorCard = await Task.FromResult(room.Game.CardsOnTable.FirstOrDefault(c => c.IsNarratorCard));

            if (narratorCard?.Votes.Count == room.UsersOnline - 1 || narratorCard?.Votes.Count == 0)
            {
                room.Game.Scoreboard.ForEach(s =>
                {
                    if (s.UserId != narratorCard.UserId)
                    {
                        s.Score += 2;
                    }
                });
                return;
            }
            List <CardOnTableModel> cards = await Task.FromResult(room.Game.CardsOnTable.ToList());

            cards.ForEach(c =>
            {
                if (c.IsNarratorCard)
                {
                    c.Votes.ForEach(v =>
                    {
                        room.Game.Scoreboard.First(s => s.UserId == v).Score        += 3;
                        room.Game.Scoreboard.First(s => s.UserId == c.UserId).Score += 3;
                    });
                }
                else
                {
                    room.Game.Scoreboard.First(s => s.UserId == c.UserId).Score += (1 * c.Votes.Count);
                }
            });
        }
Example #2
0
        public async Task VoteCard(string roomId, RoomModel room, string connectionid, string cardId)
        {
            UserModel user = await Task.FromResult(room.Users.FirstOrDefault(u => u.Token == connectionid));

            if (user == null || !room.Game.Waiting.Contains(user.Id))
            {
                return;
            }
            CardOnTableModel card = await Task.FromResult(room.Game.CardsOnTable.FirstOrDefault(c => c.Id == cardId));

            if (card == null || card.UserId == user.Id)
            {
                return;
            }
            card.Votes.Add(user.Id);
            room.Game.Waiting.Remove(user.Id);

            if (room.Game.Waiting.Count == 0)
            {
                await SetScore(room);
                await ChangeNarrator(room);
            }

            await _rooms.Save(roomId, room);

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