using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; namespace DominionBase.Players.AI.Bots { [DebuggerDisplay("{DebuggerDisplay,nq}")] public class BotRule { public Type Buyable { get; set; } public BotRuleConditionCollection Conditions { get; set; } public BotRule() { Conditions = new BotRuleConditionCollection(); } public bool BuyAllowed(IGame game, IPlayer player, List buyables) { return buyables.Any(b => b.TopCard.Type == Buyable) && Conditions.All(c => c.Evaluate(player) as bool? == true); } internal bool WantsToBuyOrGainNow(IPlayer player) { //if (owner.getPossessor() != null) // return wantsToBuyOrGainNow(owner.getPossessor()); return (from condition in Conditions let result = condition.Evaluate(player) select condition).All(condition => !condition.IsTrue); } public override string ToString() { string ret = $"{Buyable.Name}"; if (Conditions.Any()) ret = $"{ret} -- {Conditions}"; return ret; } public string DebuggerDisplay => $"{{{ToString()}}}"; } }