public void Pay(int amount, IAssetHolder payee, Bank bank) { payee.Receive(amount); }
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); }