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); } }); }
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); }