Exemple #1
0
        private void HandleRotateGoldCardMessage(RotateGoldCardMessage rotateGoldCardMessage)
        {
            _canRotate     = true;
            TextInChatBox += "Поверните в нужную сторону карты с золотом \n";
            OnPropertyChanged(nameof(TextInChatBox));

            _cardsToRotate = rotateGoldCardMessage.CardsToRotate;
        }
Exemple #2
0
        public void ExecuteTurnCommand(object o)
        {
            var rotateMessage = new RotateGoldCardMessage();

            rotateMessage.CardsToRotate = _cardsToRotate;
            rotateMessage.RoleType      = CurrentPlayer.Role.Role;
            _client.SendMessage(rotateMessage);

            _canRotate = false;
        }
Exemple #3
0
        private static List <Message> HandleBuildMessage(Message message, ClientObject client)
        {
            Logger.Write($"Build message was received from client {client.Id}");

            var result = new List <Message>();

            var buildMessage = (BuildMessage)message;

            result.Add(buildMessage);

            // check if user can build card
            if (Validator.ValidateBuildingTunnelAction(buildMessage.RouteCard, Table.OpenedCards, buildMessage.RoleType))
            {
                buildMessage.IsSuccessfulBuild = true;
                buildMessage.IsBroadcast       = true;

                var updateMessage = ProvidePlayerNewCards(client.Id, new List <int> {
                    buildMessage.CardId
                });
                result.Add(updateMessage);

                Table.AddCard(buildMessage.RouteCard, buildMessage.RoleType);

                var goldCardsToOpen = Table.GoldCards
                                      .Where(goldCard =>
                                             goldCard.Coordinates.IsNeighbour(buildMessage.RouteCard.Coordinates) &&
                                             (!goldCard.IsOpen || !Table.OpenedCards.Contains(goldCard)))
                                      .ToList();

                var rotateMessage = new RotateGoldCardMessage();
                foreach (var goldCard in goldCardsToOpen)
                {
                    if (Validator.CheckForGold(goldCard, Table.OpenedCards, buildMessage.RoleType) &&
                        Validator.CheckForGold((GoldCard)goldCard.Rotate(), Table.OpenedCards, buildMessage.RoleType))
                    {
                        rotateMessage.CardsToRotate.Add(goldCard);
                    }
                    else
                    {
                        if (!Validator.CheckForGold(goldCard, Table.OpenedCards, buildMessage.RoleType))
                        {
                            goldCard.Rotate();
                        }
                    }

                    goldCard.IsOpen = true;
                    Table.OpenedCards.Add(goldCard);
                    var exploreMessage = new ExploreMessage();
                    exploreMessage.IsBroadcast = true;
                    exploreMessage.Card        = goldCard;
                    exploreMessage.Coordinates = goldCard.Coordinates;

                    result.Add(exploreMessage);
                }

                if (rotateMessage.CardsToRotate.Count > 0)
                {
                    result.Add(rotateMessage);
                }
                else
                {
                    var directMessage = SetNextPlayer();
                    result.Add(directMessage);
                }

                if (CheckGameEnd())
                {
                    result.Add(CreateEndGameMessage());
                }

                Table.UpdateAllConnections(buildMessage.RoleType);
                result.Add(PrepareGoldMessage());
                result.Add(new UpdateTokensMessage(Table.Tokens));

                Logger.Write($"Build message was sent from client {client.Id}");
            }
            else
            {
                buildMessage.IsSuccessfulBuild = false;
                buildMessage.IsBroadcast       = false;

                Logger.Write($"Can't build message was sent for client {client.Id}");
            }


            return(result);
        }