protected internal void LaunchGame() { if (!_clients.All(c => c.IsReady) || _clients.Count != 2) { return; } Console.WriteLine("All players are ready, let's start!"); var launcher = new Launcher(_clients.Select(c => c.Id).ToList()); launcher.ProvideRolesForPlayers(); launcher.ProvideHandCardsForPlayers(); foreach (var client in _clients) { var player = launcher.Players.First(pl => pl.Id == client.Id); var gameMessage = new UpdateTableMessage(); gameMessage.IsBroadcast = false; gameMessage.RoleCard = player.Role; gameMessage.Hand = player.Hand; gameMessage.IsMyTurn = player.Role.Role == RoleType.Green; SendMessage(gameMessage, client.Id); var initializeTableMessage = new InitializeTableMessage(); initializeTableMessage.GoldCards = launcher.GoldCardsForGame; initializeTableMessage.StartCards = launcher.StartCards; initializeTableMessage.Players = Table.Players; SendMessage(initializeTableMessage, client.Id); } MessageManager.Players.Enqueue(_clients.First(c => c.Id != launcher.Players.First(pl => pl.Role.Role == RoleType.Green).Id)); MessageManager.Players.Enqueue(_clients.First(c => c.Id == launcher.Players.First(pl => pl.Role.Role == RoleType.Green).Id)); MessageManager.AbstractPlayers = launcher.Players; MessageManager.HandCards = launcher.ShuffledHandCards; }
private void HandleInitializeTableMessage(InitializeTableMessage message) { Application.Current.Dispatcher.Invoke(delegate { foreach (var goldCard in message.GoldCards) { Map[goldCard.Coordinates.Coordinate_Y][goldCard.Coordinates.Coordinate_X] = goldCard; } foreach (var startCard in message.StartCards) { Map[startCard.Coordinates.Coordinate_Y][startCard.Coordinates.Coordinate_X] = startCard; } Players = message.Players; }); OnPropertyChanged(nameof(Map)); EnemyHand = new PlayerHandViewModel(false, Players.First(pl => pl.Id != CurrentPlayer.Id)); OnPropertyChanged(nameof(EnemyHand)); }