public bool BeginTurn(Campaign campaign) { // Trouver l'id du joueur admin var players = (from p in _dal.Players where p.CampaignId == campaign.Id select p).ToList(); var adminId = players.FirstOrDefault(p => p.IsAdmin).Id; // Générer la map de début de tour foreach (var player in players.Where(p => !p.IsAdmin)) { var newMap = new Map() { PlayerId = player.Id, CampaignId = campaign.Id, Name = $"Début de Tour {campaign.CurrentTurn}", Turn = campaign.CurrentTurn, Size = 9, CreationDate = DateTime.Now }; _dal.Maps.Add(newMap); _dal.SaveChanges(); _dal.MapTiles.AddRange(this.GenerateMapTiles(newMap.Id, campaign.Id, player.Id, 0)); player.HasNewMap = true; } // Générer les feuilles d'ordres des joueurs foreach (var player in players.Where(p => !p.IsAdmin)) { var playerAssets = JsonSerializer.Deserialize <PlayerAssets>(player._jsonAssets); var sheet = new OrdersSheet() { MaxOrdersCount = 5, MaxPriority = Math.Min(playerAssets.Resources.Strategy, 10), PlayerId = player.Id, Priority = 0, Status = OrdersSheetStatus.Writing, Turn = campaign.CurrentTurn }; _dal.OrdersSheets.Add(sheet); } _dal.SaveChanges(); return(true); }
public ActionResult Put(OrdersSheet input) { try { using (_dal) { var claim = User.Claims.Where(x => x.Type == ClaimTypes.Sid).FirstOrDefault(); if (claim == null) { return(Unauthorized()); } var idPlayer = long.Parse(claim.Value); // On récupère la feuille d'ordres concernée var ordersSheet = (from s in _dal.OrdersSheets where s.PlayerId == idPlayer && s.Id == input.Id select s).FirstOrDefault(); if (ordersSheet == null) { return(NotFound()); } if (ordersSheet.Status != OrdersSheetStatus.Writing) { return(StatusCode((int)HttpStatusCode.PreconditionFailed, "Statut incorrect de la feuille d'ordres")); } ordersSheet.Priority = input.Priority; _dal.SaveChanges(); return(Ok(ordersSheet)); } } catch (Exception) { return(StatusCode((int)HttpStatusCode.InternalServerError)); } }
public List <Order> CheckOrdersSheet(OrdersSheet sheet) { // On récupère les infos des joueurs de la campagne var dbPlayer = (from p in _dal.Players where p.Id == sheet.PlayerId select p).FirstOrDefault(); var player = new Player() { Id = dbPlayer.Id, Assets = dbPlayer.Assets, CampaignId = dbPlayer.CampaignId, Name = dbPlayer.Name }; // On récupère les infos des armées du joueur var dbUnits = (from u in _dal.Units join p in _dal.Players on u.PlayerId equals p.Id where p.Id == dbPlayer.Id select u).ToList(); var units = new List <Unit>(); foreach (var army in dbUnits.Where(u => u.Type == "Army")) { units.Add(new Unit() { Id = army.Id, Assets = army.Assets, Name = army.Name, PlayerId = army.PlayerId, Type = army.Type, X = army.X, Y = army.Y }); } // On récupère les ordres de la feuille d'ordres var orders = (from o in _dal.Orders where o.OrdersSheetId == sheet.Id orderby o.Rank select o).ToList(); // On nettoie les unités virtuelles des ordres de renforts supprimés List <Unit> expiredUnits = new List <Unit>(); foreach (var virtualUnit in dbUnits.Where(u => u.Type == "Reinforcement")) { long orderId; if (virtualUnit.Assets.ContainsKey("OrderId") && long.TryParse(virtualUnit.Assets["OrderId"].Keys.FirstOrDefault(), out orderId)) { var order = orders.FirstOrDefault(o => o.Id == orderId); if (order == null) { expiredUnits.Add(virtualUnit); } } } _dal.Units.RemoveRange(expiredUnits); // On contrôle la validité des PPs var playerAssets = JsonSerializer.Deserialize <PlayerAssets>(player._jsonAssets); if (playerAssets.Resources.Strategy < sheet.Priority) { sheet.Priority = playerAssets.Resources.Strategy; } playerAssets.Resources.Strategy -= sheet.Priority; player._jsonAssets = JsonSerializer.Serialize <PlayerAssets>(playerAssets); // On contrôle la validité de chaque ordre foreach (var order in orders) { order.ActionType = (from a in _dal.ActionTypes where a.Id == order.ActionTypeId select a).FirstOrDefault(); switch (order.ActionType.Label) { case "Commerce": { this._validationEngine.Trade(order, player); break; } case "Déplacement": { this._validationEngine.Move(order, player, units); break; } case "Flatterie": { this._validationEngine.Flatter(order, player); break; } case "Formation": { this._validationEngine.Formation(order, player, units); break; } case "Médisance": { this._validationEngine.Calomny(order, player); break; } case "Planification": { this._validationEngine.Planify(order, player); break; } case "Renforts": { this._validationEngine.Reinforce(order, player, units); break; } case "Renseignements": { this._validationEngine.Spy(order, player); break; } default: { order.Status = OrderStatus.Invalid; order.Comment = "Type d'action inconnu"; break; } } } return(orders); }