using DominionBase.Players; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading; namespace DominionBase { public interface IGame { #region Events event CostComputeEventHandler CostCompute; event GameEndedEventHandler GameEndedEvent; event GameMessageEventHandler GameMessage; #endregion #region Properties IPlayer ActivePlayer { get; } List CardsAvailable { get; } Turn CurrentTurn { get; } bool IsEndgameTriggered { get; } ConcurrentQueue MessageRequestQueue { get; } ConcurrentQueue MessageResponseQueue { get; } PlayerCollection Players { get; } Random RNG { get; } GameSettings Settings { get; } DateTime StartTime { get; } GameState State { get; } ITable Table { get; } TurnCollection TurnsTaken { get; } IEnumerable UnmodifiedTurnsTaken { get; } AutoResetEvent WaitEvent { get; } PlayerCollection Winners { get; } #endregion #region Methods void Abort(); void AcceptCards(); void Clear(); Cards.Cost ComputeCost(ICost card); void FinalizeSetup(); IPlayer GetPlayerFromIndex(IPlayer currentPlayer, int index); IEnumerator GetPlayersStartingWithActiveEnumerator(); IEnumerator GetPlayersStartingWithEnumerator(IPlayer player); void Load(string filename); void Save(string filename); void SelectCards(); void SendMessage(IPlayer player, ICardBase sourceCard); void SendMessage(IPlayer player, ICardBase sourceCard, Currency currency); void SendMessage(IPlayer player, ICardBase sourceCard, string messageType, Currency currency); void SendMessage(IPlayer player, ICardBase sourceCard, IDisplayable card, int count = 1, Token token = null); void SendMessage(IPlayer player, ICardBase sourceCard, int count); void SendMessage(IPlayer player, ICardBase sourceCard, int count, params IDisplayable[] cards); void SendMessage(IPlayer player, ICardBase sourceCard, string messageType, int count); void SendMessage(IPlayer player, ICardBase sourceCard, string messageType, params IDisplayable[] cards); void SendMessage(IPlayer player, ICardBase sourceCard, params IDisplayable[] cards); void SendMessage(IPlayer player, IPlayer playerAffected, ICardBase sourceCard, IDisplayable card); void SendMessage(IPlayer player, Token sourceToken); void SendMessage(IPlayer player, Token sourceToken, int count); Thread SetNextPlayer(); void StartAsync(); #endregion } }