GameRoom.Structure.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using MafiaTelegramBot.Resources;
  5. namespace MafiaTelegramBot.Game.GameRooms
  6. {
  7. public abstract partial class GameRoom
  8. {
  9. public bool IsRunning;
  10. public bool IsDay = false;
  11. public int MaxPlayers = 10;
  12. private int _minPlayers = Constants.PLAYER_LIMITS_MIN;
  13. public bool IsPrivate { get; init; }
  14. public abstract bool IsExtended { get; protected set; }
  15. public bool TimerEnabled { get; set; } = true;
  16. public string RoomName { get; init; } = "NoNameRoom";
  17. public Player Owner { get; init; } = new();
  18. private int _largeVote = 0; //большее из количеств голосов за игроков
  19. private readonly List<Player> _voteUpList = new();
  20. protected Player PlayerToDispatch = null;
  21. public readonly MessageHandler MHandler;
  22. public readonly QueryHandler QHandler;
  23. private readonly MafiaChannel _mafiaCh;
  24. public readonly PlayersChannel PlayersCh;
  25. private readonly Queue<Player> _turnOrder = new();
  26. public readonly Dictionary<long, Player> Players = new();
  27. protected readonly Dictionary<Roles, int> Settings = new();
  28. public abstract Dictionary<Roles, List<Player>> PlayersRole { get; set; }
  29. protected GameRoom()
  30. {
  31. MHandler = new MessageHandler(this);
  32. QHandler = new QueryHandler(this);
  33. _mafiaCh = new MafiaChannel(this);
  34. PlayersCh = new PlayersChannel(this);
  35. }
  36. public async Task<List<Player>> GetPlayers()
  37. {
  38. return await Task.Run(() =>
  39. {
  40. var players = Players.Values.ToList();
  41. players.Remove(Owner);
  42. return players;
  43. });
  44. }
  45. public bool IsFilled()
  46. {
  47. return Players.Count == MaxPlayers;
  48. }
  49. }
  50. }