public IActionResult AssignToFleet(Guid id, Guid shipId, Guid fleetId)
        {
            var gs   = gsRepo.GetById(id).Result;
            var pawn = gs.Pawns.First(x => x.Id == shipId);

            pawn.FleetId = fleetId;
            gsRepo.Save(gs);
            return(RedirectToAction("Index", "StrategicView", new { id }));
        }
        public PartialViewResult Action(Guid id, BattleAction vm)
        {
            var gs = _gsRepo.GetById(id).Result;


            var pawnToAffect  = gs.Pawns.Single(x => x.Id == vm.PawnId);
            var internalRoles = vm.NumRolls;


            var localLog = new List <string>();

            localLog.Add($"== Simulating {vm.NumRolls} Internals ==");
            var sim = new MultiRoundDamageAllocationSimulator();

            for (int i = 0; i < internalRoles; i++)
            {
                var result = sim.TakeDamage(pawnToAffect);
                localLog.Add(result.TrackNumber + " - " + result.AffectedUnitCode);
            }

            pawnToAffect.BattleLog.InsertRange(0, localLog);

            var excessDamageRemaining = pawnToAffect.ComponentsRemaining["Excess Damage"];

            pawnToAffect.Destroyed = excessDamageRemaining <= 0;


            _gsRepo.Save(gs);

            vm.GameState = gs;
            this.ViewBag.PostActionGameState = JsonConvert.SerializeObject(vm.GameState);

            return(PartialView("_Pawn", pawnToAffect));
        }
Exemplo n.º 3
0
 public void SaveGameIfRequested(GameState gameState)
 {
     if (saveGameAtTheEndOfCurrentFrame)
     {
         saveGameAtTheEndOfCurrentFrame = false;
         var repository = new GameStateRepository();
         repository.Save(gameState);
         gameState.Events.Add(new GameSaved());
     }
 }
        public IActionResult BeginGame(Guid?id, GameStateSpecificationViewModel vm)
        {
            var shipsToCreate = vm.SelectedShips.Where(x => x.ShipId != null || !string.IsNullOrWhiteSpace(x.Code));

            GameState gs;

            if (id != null)
            {
                gs = _gsRepo.GetById(id.Value).Result;
            }
            else
            {
                gs = new GameState {
                    Id = Guid.NewGuid()
                }
            };

            gs.Name = vm.GameName;

            foreach (var shipToCreate in shipsToCreate)
            {
                Pawn pawn;
                if (shipToCreate.ShipId == null)
                {
                    var spec = GameRules.GetShipByCode(shipToCreate.Code);
                    pawn             = Pawn.FromSpecification(spec);
                    pawn.GameStateId = gs.Id.Value;
                    gs.Pawns.Add(pawn);
                }
                else
                {
                    pawn = gs.Pawns.First(x => x.Id == shipToCreate.ShipId.Value);
                }

                pawn.Name = shipToCreate.Name;
            }


            _gsRepo.Save(gs);

            return(RedirectToAction("Index", "StrategicView", new { id }));
        }
    }