|
@@ -4,10 +4,10 @@ using System.Linq;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
using MafiaTelegramBot.Controllers;
|
|
|
-using MafiaTelegramBot.DataBase;
|
|
|
+using MafiaTelegramBot.CustomCollections.Extensions;
|
|
|
+using MafiaTelegramBot.Game.GameRoles;
|
|
|
using MafiaTelegramBot.Models;
|
|
|
using MafiaTelegramBot.Resources;
|
|
|
-using MafiaTelegramBot.Extensions;
|
|
|
using Telegram.Bot.Types.ReplyMarkups;
|
|
|
|
|
|
namespace MafiaTelegramBot.Game
|
|
@@ -22,11 +22,11 @@ namespace MafiaTelegramBot.Game
|
|
|
public bool IsExtended { get; init; }
|
|
|
public bool TimerEnabled { get; set; } = true;
|
|
|
public string RoomName { get; init; } = "NoNameRoom";
|
|
|
- public UserEntity Owner { get; init; } = new();
|
|
|
+ public Player Owner { get; init; } = new();
|
|
|
|
|
|
- private readonly Queue<UserEntity> _turnOrder = new();
|
|
|
+ private readonly Queue<Player> _turnOrder = new();
|
|
|
|
|
|
- public readonly Dictionary<long, UserEntity> Players = new();
|
|
|
+ public readonly Dictionary<long, Player> Players = new();
|
|
|
|
|
|
public readonly Dictionary<Roles, int> Settings = new()
|
|
|
{
|
|
@@ -76,18 +76,16 @@ namespace MafiaTelegramBot.Game
|
|
|
await Task.Run(async () =>
|
|
|
{
|
|
|
foreach (var (_, player) in Players)
|
|
|
+ player.CurrentRole = Role.GetNewRoleInstance(Roles.None);
|
|
|
+ _isRunning = false;
|
|
|
+ _turnOrder.Clear();
|
|
|
+ Thread.Sleep(10000);//TODO just for tests
|
|
|
+ if (!Players.ContainsKey(Owner.Id) || Players.Count == 0) new Task(async() =>
|
|
|
+ await RoomController.DissolveRoom(IsPrivate ? RoomEncrypter.NameToCode(RoomName) : RoomName)).Start();
|
|
|
+ else
|
|
|
{
|
|
|
- player.SetRole(Roles.None);
|
|
|
- _isRunning = false;
|
|
|
- _turnOrder.Clear();
|
|
|
- Thread.Sleep(10000);//TODO just for tests
|
|
|
- if (!Players.ContainsKey(Owner.Id) || Players.Count == 0) new Task(async() =>
|
|
|
- await RoomController.DissolveRoom(IsPrivate ? RoomEncrypter.NameToCode(RoomName) : RoomName)).Start();
|
|
|
- else
|
|
|
- {
|
|
|
- await Bot.SendWithMarkdown2(Owner.ChatId, strings.thanks_for_game, Keyboards.OwnerGameMenu);
|
|
|
- await NotifyPlayersAbout(Owner.Id, strings.thanks_for_game, Keyboards.PlayerGameMenu);
|
|
|
- }
|
|
|
+ await Bot.SendWithMarkdown2(Owner.ChatId, strings.thanks_for_game, Keyboards.OwnerGameMenu);
|
|
|
+ await NotifyPlayersAbout(Owner.Id, strings.thanks_for_game, Keyboards.PlayerGameMenu);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -132,7 +130,7 @@ namespace MafiaTelegramBot.Game
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- public async Task<List<UserEntity>> GetPlayers()
|
|
|
+ public async Task<List<Player>> GetPlayers()
|
|
|
{
|
|
|
return await Task.Run(() =>
|
|
|
{
|
|
@@ -147,12 +145,13 @@ namespace MafiaTelegramBot.Game
|
|
|
await Task.Run(() =>
|
|
|
{
|
|
|
var random = new Random();
|
|
|
+ var roles = new List<Roles>();
|
|
|
+ foreach (var (key, value) in Settings) roles.AddTimes(key, value);
|
|
|
for (var i = 0; i < _turnOrder.Count; ++i)
|
|
|
{
|
|
|
var user = _turnOrder.Dequeue();
|
|
|
- var roles = new List<Roles>();
|
|
|
- foreach (var (key, value) in Settings) roles.AddTimes(key, value);
|
|
|
- user.SetRole(roles.GetAndRemove(random.Next(roles.Count)));
|
|
|
+ var next = roles.GetAndRemove(random.Next(roles.Count));
|
|
|
+ user.CurrentRole = (Role.GetNewRoleInstance(next));
|
|
|
_turnOrder.Enqueue(user);
|
|
|
}
|
|
|
});
|
|
@@ -191,7 +190,7 @@ namespace MafiaTelegramBot.Game
|
|
|
foreach (var player in Players.Values)
|
|
|
{
|
|
|
var message =
|
|
|
- $"{strings.your_role}: _*{player.GetRole()}*_\n" +
|
|
|
+ $"{strings.your_role}: _*{player.GetRoleName()}*_\n" +
|
|
|
$"{strings.your_turn_order}: _*{player.TurnOrder}*_\n"+
|
|
|
$"{strings.bot_starting_game}";
|
|
|
await Bot.SendWithMarkdown2(player.ChatId, message, Keyboards.InGamePlayerMenu);
|