Exemple #1
0
 public void Pay(int amount, IAssetHolder payee, Bank bank)
 {
     payee.Receive(amount);
 }
Exemple #2
0
        public void Pay(int amount, IAssetHolder payee, Bank bank)
        {
            LogEvent("Pay", amount);

            if (amount < 0)
            {
                throw new ApplicationException("Can't pay less than 0");
            }

            if ((Money - amount) < 0)
            {
                // can't afford it

                var sumReached = false;

                while (sumReached == false)
                {
                    var assetToSellBuilding = Properties.Where(b => b.BuildingCount > 0)
                                              .Where(c => c.MonopolySet.Max(m => (((Property)m).BuildingCount)) == c.BuildingCount)
                                              .OrderBy(o => Genetics.GetGeneExpression(GeneType.ImprovementValue, o))
                                              .FirstOrDefault();

                    if (assetToSellBuilding != null)
                    {
                        Money += assetToSellBuilding.SellBuilding();

                        if ((Money - amount) >= 0)
                        {
                            sumReached = true;
                        }
                    }
                    else // no buildings, start mortgaging
                    {
                        var assetForMortaging = Assets.Where(x => x.Mortgaged == false)
                                                .OrderBy(o => Genetics.GetGeneExpression(GeneType.PropertyValue, o))
                                                .FirstOrDefault();

                        if (assetForMortaging != null)
                        {
                            Money += assetForMortaging.MortgageAsset();

                            if ((Money - amount) >= 0)
                            {
                                sumReached = true;
                            }
                        }
                        else
                        {
                            // Nothing more to mortgage, broke!
                            break;
                        }
                    }
                }

                if (sumReached == false)
                {
                    // Couldn't pay. Hand over all assets to debtor

                    if (payee is FreeParking || payee is Bank)
                    {
                        foreach (var asset in Assets)
                        {
                            asset.Owner = bank;
                            bank.Assets.Add(asset);
                            asset.UnmortgageAsset();
                        }
                    }
                    else
                    {
                        foreach (var asset in Assets)
                        {
                            asset.Owner = payee;
                            payee.Assets.Add(asset);
                        }
                    }

                    Assets.Clear();

                    // Lose get out of jail free cards

                    while (GetOutOfJailFreeCards.Count > 0)
                    {
                        GetOutOfJailFreeCards.Dequeue();
                    }

                    // All money turned over

                    payee.Receive(Money);
                    Money = 0;

                    Status = PlayerStatus.Bankrupt;
                    LogEvent("Bankrupt trying to pay ", amount);

                    return;
                }
            }

            Money -= amount;
            payee.Receive(amount);
        }