using System; using System.Diagnostics.Contracts; namespace DominionBase.Currencies { [Serializable] public sealed class Debt : CurrencyBase { public Debt() { } public Debt(int value) : base(value) { } public Debt(Debt value) : base(value.Value) { } public new static string Sign => "⌂"; public static Debt operator +(Debt x, Debt y) { Contract.Requires(x != default(Potion), "x cannot be null"); Contract.Requires(y != default(Potion), "y cannot be null"); Debt newDebt = new Debt(x.Value); newDebt.Value += y.Value; if (newDebt.Value < 0) newDebt.Value = 0; return newDebt; } public static Debt operator +(Debt x, int y) { Contract.Requires(x != default(Potion), "x cannot be null"); Debt newDebt = new Debt(x.Value); newDebt.Value += y; if (newDebt.Value < 0) newDebt.Value = 0; return newDebt; } public static Debt Add(Debt left, Debt right) { return left + right; } public static Debt operator -(Debt x, Debt y) { Contract.Requires(x != default(Potion), "x cannot be null"); Contract.Requires(y != default(Potion), "y cannot be null"); Debt newDebt = new Debt(x.Value); newDebt.Value -= y.Value; if (newDebt.Value < 0) newDebt.Value = 0; return newDebt; } public static Debt operator -(Debt x, int y) { return x + -y; } public static Debt Subtract(Debt left, Debt right) { return left - right; } public static Debt operator -(Debt c) { Contract.Requires(c != default(Potion), "c cannot be null"); return new Debt { Value = -c.Value, IsVariable = c.IsVariable }; } public static Debt Negate(Debt item) { return -item; } public override string ToString() { return $"{base.ToString()}"; } } }