private readonly Dictionary <int, Dictionary <int, Trade> > proposedTrades = new Dictionary <int, Dictionary <int, Trade> >(); //TODO: Move this
public Dictionary <int, ITrade> ProposeTrade(Player player, List <List <Resource> > give, List <List <Resource> > take)
{
var trade = new Trade(give, take);
var dict = new Dictionary <int, Trade>(); //Reversed trades
var replyDict = new Dictionary <int, ITrade>();
Log(new ProposeTradeLogEvent(player.Id, trade.Give, trade.Take));
var state = CurrentGamestate();
foreach (var other in players)
{
if (other.Id == player.Id)
{
continue; //No need to propose a trade with yourself
}
dict[other.Id] = (Trade)other.Agent.HandleTrade(state, trade.Reverse(), player.Id);
if (dict[other.Id].Status == TradeStatus.Countered)
{
replyDict[other.Id] = dict[other.Id].Reverse();
//Note, take and give are swapped since dict[other.Id] is as seen from the opponent
var giveLog = dict[other.Id].Take.Where(c => c.Count > 0).Select(r => r[0]).ToList();
var takeLog = dict[other.Id].Give.Where(c => c.Count > 0).Select(r => r[0]).ToList();
Log(new CounterTradeLogEvent(other.Id, giveLog, takeLog));
break;
}
}
proposedTrades[player.Id] = dict;
return(replyDict);
}