Exemplo n.º 1
0
    //Funcitionality of all buttons relevant to an ongoing game. Their listeners are all placed
    //in this method as they can be called without pressing a button from the AI script.
    public static void CallIngameButtonListener(Button button)
    {
        Player player = GameManager.CurrentPlayer;

        if (player == null)
        {
            return;
        }

        bool ai = player.GetComponent <AI>();

        //Checks if ai called the listener or if the current player called it. This is needed
        //as if the player presses a button during the ai's turn, it needs to not do anything.
        if (button.interactable && ((!ai && ButtonClicked) || (ai && !ButtonClicked) ||
                                    /*only these buttons can be pressed by human when AI is active*/ button == Pay || button == TradingSystem.Offer || button == TradingSystem.Accept))
        {
            if (button == Roll)
            {
                Die.Roll();
            }
            else if (button == Buy)
            {
                GameManager.CurrentPlayer.Purchase();
                GameManager.UpdateBuyButtonInteractibility();
                GameManager.UpdateAuctionButtonInteractibility();
                GameManager.UpdateNextPlayerButtonInteractibility();
                UpdateInventoryData();
            }
            else if (button == PayFixed)
            {
                GameManager.PlayerMustPay(200);
            }
            else if (button == PayPercentage)
            {
                GameManager.PlayerMustPay((ushort)(0.1 * GameManager.CurrentPlayer.GetTotalPotentialBalance()));
            }
            else if (button == Pay)
            {
                Property    property    = GameManager.CurrentPlayer.Position.GetComponent <Property>();
                ChanceTile  chance      = GameManager.CurrentPlayer.Position.GetComponent <ChanceTile>();
                PaymentTile paymentTile = GameManager.CurrentPlayer.Position.GetComponent <PaymentTile>();
                if (property != null)
                {
                    ushort payment = property.PaymentPrice();
                    GameManager.CurrentPlayer.RemoveFunds(payment);
                    property.Owner.AddFunds(payment);
                    SwitchToMenuWithInventory(EndOfTurnOptions);
                }
                else if (chance != null)
                {
                    if (GameManager.ActiveCard is CardCollect)
                    {
                        ushort payment = 50;
                        CardCollect.currentPayee.RemoveFunds(payment);
                        GameManager.CurrentPlayer.AddFunds(payment);
                        CardCollect.currentPayee = GameManager.Players[(Array.IndexOf(GameManager.Players, CardCollect.currentPayee) + 1) % GameManager.Players.Length];

                        //switches payment to next player
                        if (CardCollect.currentPayee != GameManager.CurrentPlayer)
                        {
                            GameManager.PlayerMustPay(payment, CardCollect.currentPayee);
                        }
                        //if looped back around to current player, stop payment loop
                        else
                        {
                            SwitchToMenuWithInventory(EndOfTurnOptions);
                        }

                        //moves camera to whomever needs to pay
                        CameraFollow.target = CardCollect.currentPayee.transform;
                    }
                    else if (GameManager.ActiveCard is CardPay)
                    {
                        CardPay activeCard = (CardPay)GameManager.ActiveCard;
                        ushort  payment    = GameManager.PaymentNeeded;
                        GameManager.CurrentPlayer.RemoveFunds(payment);
                        CardPay cardPay = (CardPay)GameManager.ActiveCard;

                        //if statement to check player still exists
                        if (cardPay.Type == EnumsForCards.cardPay.payEachPlayer)
                        {
                            //Pays amount to each player
                            foreach (Player p in GameManager.Players)
                            {
                                if (p != GameManager.CurrentPlayer)
                                {
                                    p.AddFunds(activeCard.Amount);
                                }
                            }
                        }
                        SwitchToMenuWithInventory(EndOfTurnOptions);
                    }
                }
                else if (paymentTile != null)
                {
                    ushort payment = GameManager.PaymentNeeded;
                    GameManager.CurrentPlayer.RemoveFunds(payment);
                    SwitchToMenuWithInventory(EndOfTurnOptions);
                }
            }
            else if (button == AcknowledgeCard)
            {
                SwitchToMenuWithInventory(EndOfTurnOptions);
                if (!(GameManager.ActiveCard is CardGetOutOfJail || GameManager.ActiveCard is TileLink))
                {
                    GameManager.ActiveCard.Use();
                }
                UpdateInventoryData();
            }
            else if (button == Auction)
            {
                Auction.interactable = false;
                GameManager.UpdateBuyButtonInteractibility();
                GameManager.UpdateNextPlayerButtonInteractibility();                                                   //update this when Trading System is implemented
                AuctionSystem.StartAuction();
            }
            else if (button == NextTurn)
            {
                GameManager.NextPlayer();
            }
            else if (button == Bankrupt)
            {
                //remove all properties and cards from player
                Player lostPlayer = GameManager.CurrentPlayer;
                lostPlayer.Reset();
                GameManager.NextPlayer();
                GameManager.RemoveActivePlayer(lostPlayer);
            }
            else if (button == BuildHouse)
            {
                _houseMode = !_houseMode;
                if (_houseMode)
                {
                    Roll.interactable  = false;
                    Trade.interactable = false;
                    BuildHouse.GetComponentInChildren <Text>().text = "Back";
                }
                else
                {
                    Roll.interactable  = true;
                    Trade.interactable = true;
                    BuildHouse.GetComponentInChildren <Text>().text = "Build House";
                }
                UpdateInventoryData();
            }
            else if (button == BackToNormalCamera)
            {
                SwitchToMenuWithInventory(TurnOptions);
                SwitchToCamera(!GameManager.OnlyAIsInGame ? MainCamera : AmbientCamera);
            }
            else if (button == Trade)
            {
                TradingSystem.ShowTradingOptions();
            }
            //go to TradingSystem class if button is part of the trading system
            else if (Array.IndexOf(TradingSystem.Buttons, button) != -1)
            {
                TradingSystem.CallTradingButtonListener(button);
            }
            else if (button == PayToLeaveJail)
            {
                GameManager.PlayerMustPay(50);
                Jail.LeaveJail();
                SwitchToMenuWithInventory(EndOfTurnOptions);
            }
        }

        _buttonClicked = false;
    }