GameRoom.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using MafiaTelegramBot.DataBase;
  5. using MafiaTelegramBot.Models;
  6. using MafiaTelegramBot.Resources;
  7. namespace MafiaTelegramBot.Game
  8. {
  9. public class GameRoom
  10. {
  11. private bool _isRunning;
  12. public int MaxPlayers = 10;
  13. private int _minPlayers = Constants.PLAYER_LIMITS_MIN;
  14. public virtual bool IsPrivate { get; protected set; } = false;
  15. public bool IsExtended { get; init; } = false;
  16. public string RoomName { get; init; } = "NoNameRoom";
  17. public User Creator { get; init; } = new();
  18. public readonly Dictionary<long, User> Players = new();
  19. public readonly Dictionary<string, string> Settings = new();
  20. public async Task<ResultCode> Start()
  21. {
  22. return await Task.Run(() =>
  23. {
  24. if (Players.Count < _minPlayers) return ResultCode.TooFewPlayers;
  25. if (Players.Count > MaxPlayers) return ResultCode.TooManyPlayers;
  26. if (_isRunning) return ResultCode.GameAlreadyRunning;
  27. _isRunning = true;
  28. //TODO game start logic
  29. return ResultCode.CodeOk;
  30. });
  31. }
  32. public async Task<List<User>> GetPlayers()
  33. {
  34. return await Task.Run(() =>
  35. {
  36. var players = Players.Values.ToList();
  37. players.Remove(Creator);
  38. return players;
  39. });
  40. }
  41. public bool IsFilled()
  42. {
  43. return Players.Count == MaxPlayers;
  44. }
  45. public async Task NotifyUserConnect(User user)
  46. {
  47. foreach (var player in Players.Values.Where(player => user.Id != player.Id))
  48. {
  49. await Bot.SendWithMarkdown2(player.ChatId, $"{strings.entry_another_user} _*{user.NickName}*_");
  50. }
  51. }
  52. }
  53. }