private static int BribeCost(BaseUnitLand unitToBribe) { City capital = unitToBribe.Player.Cities.Where(c => c.HasBuilding(new Palace())).FirstOrDefault(); int distance = capital == null ? 16 : unitToBribe.Tile.DistanceTo(capital); return(((unitToBribe.Player.Gold + 750) / (distance + 2)) * unitToBribe.Price); }
private static int DialogHeight(BaseUnitLand unitToBribe, short gold) { int choices = 0; if (CanBribe(unitToBribe, gold)) { choices = 2; } return((choices * Resources.GetFontHeight(FONT_ID)) + 30); }
private static int BribeCost(BaseUnitLand unitToBribe) { City capital = unitToBribe.Player.GetCapital(); int distance = capital == null ? 16 : unitToBribe.Tile.DistanceTo(capital); int cost = ((unitToBribe.Player.Gold + 750) / (distance + 2)) * unitToBribe.Price; // fire-eggs 20190628 barbarian cost is 50% return((unitToBribe.Player.Civilization is Barbarian) ? cost / 2 : cost); }
internal DiplomatBribe(BaseUnitLand unitToBribe, Diplomat diplomat) : base(100, 80, 135, DialogHeight(unitToBribe, diplomat.Player.Gold)) { _unitToBribe = unitToBribe ?? throw new ArgumentNullException(nameof(unitToBribe)); _diplomat = diplomat ?? throw new ArgumentNullException(nameof(diplomat)); _bribeCost = BribeCost(unitToBribe); _canBribe = CanBribe(unitToBribe, diplomat.Player.Gold); DialogBox.DrawText($"{unitToBribe.Player.TribeName} {unitToBribe.Name}", 0, 15, 5, 5); DialogBox.DrawText($"will desert for ${_bribeCost}", 0, 15, 5, 5 + Resources.GetFontHeight(FONT_ID)); DialogBox.DrawText($"Treasury ${diplomat.Player.Gold}", 0, 15, 5, 5 + (2 * Resources.GetFontHeight(FONT_ID))); }
public static Show DiplomatBribe(BaseUnitLand unitToBribe, Diplomat diplomat) => new Show(new DiplomatBribe(unitToBribe, diplomat));
private static bool CanBribe(BaseUnitLand unitToBribe, short gold) { return(gold >= BribeCost(unitToBribe)); }