protected virtual void OnFieldSold(Player player, IFieldRentable field)
 {
     FieldSold?.Invoke(this, new FieldSoldEventArgs()
     {
         FormerOwner = player, Field = field
     });
 }
 protected virtual void OnMortgagePayed(object source, IFieldRentable field)
 {
     MortgagePayed?.Invoke(this, new MortgagePayedEventArgs()
     {
         Field = field
     });
 }
 protected virtual void OnFieldBought(Player player, IFieldRentable field)
 {
     FieldBought?.Invoke(this, new FieldBoughtEventArgs()
     {
         NewOwner = player, Field = field
     });
 }
 public void BuyField(Player player, IFieldRentable field, int price)
 {
     player.Money     -= price;
     field.Owner       = player;
     field.CurrentRent = field.Rent[0];
     OnFieldBought(player, field);
 }
 protected virtual void OnChosePayMortgage(IFieldRentable field, Player player)
 {
     ChosePayMortgage?.Invoke(this, new ChoseMortgageEventArgs()
     {
         Field = field, Player = player
     });
 }
        public void PutUnderMortgage(Player player, IFieldRentable field)
        {
            player.Money       += field.MortgageValue;
            field.UnderMortgage = true;
            field.CanMortgage   = false;

            OnFieldMortgaged(this, field);
        }
 protected virtual void OnChoseTrade(Player opponent, Player currentPlayer, IFieldRentable buyField, IFieldRentable sellField, int offerMoney, int askMoney)
 {
     ChoseTrade?.Invoke(this, new ChoseTradeEventArgs()
     {
         Opponent      = opponent,
         CurrentPlayer = currentPlayer,
         BuyField      = buyField,
         SellField     = sellField,
         OfferMoney    = offerMoney,
         AskMoney      = askMoney
     });
 }
        public void PayOffMortgage(Player player, IFieldRentable field)
        {
            if (player.Money >= field.MortgageValue + field.MortgageValue / 10)
            {
                player.Money       -= field.MortgageValue + field.MortgageValue / 10;
                field.UnderMortgage = false;
                field.CanMortgage   = true;

                OnMortgagePayed(this, field);
            }
            else
            {
                Console.WriteLine("Not enough money");
            }
        }
 public void SellField(Player player, IFieldRentable field, int price)
 {
     player.Money += price;
     field.Owner   = null;
     OnFieldSold(player, field);
 }