public async Task SelectCard(SelectCardEvent cardEvent) { await _games.SelectCard(Context.Items["room"]?.ToString(), Room, Context.ConnectionId, cardEvent); }
public async Task SelectCard(SelectCardEvent card) => await _signalr.HubConnection.SendAsync("SelectCard", card);
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); }