Exemplo n.º 1
0
        public void Travel(int citizenID, Region startRegion, Region endRegion, MovingTicket ticket)
        {
            using (NoSaveChanges)
            {
                var citizen = citizenRepository.GetById(citizenID);

                citizen.RegionID = endRegion.ID;

                equipmentRepository.RemoveEquipmentItem(citizen.Entity.EquipmentID.Value, ticket);

                var trades = tradeRepository.GetTradesAssociatedWithEntity(citizenID)
                             .Where(trade => trade.TradeStatusID == (int)TradeStatusEnum.Ongoing)
                             .ToList();

                var citizenLink = EntityLinkCreator.Create(citizen.Entity);
                var reason      = $"{citizenLink} moving into other region";
                foreach (var trade in trades)
                {
                    tradeService.AbortTrade(trade, reason);
                }

                citizen.HitPoints -= ticket.HpLoss;
            }

            ConditionalSaveChanges(citizenRepository);
        }
        public TravelSummaryViewModel(MethodResult canTravel, Path travelPath, MovingTicket ticket)
        {
            CanTravel = canTravel.isSuccess;
            if (CanTravel == false)
            {
                CannotTravelReason = canTravel.ToString();
            }

            if (Math.Abs((travelPath?.Distance ?? 0) - 0) < 0.0001)
            {
                Distance = null;
            }
            else
            {
                Distance = travelPath.Distance;
            }
            TicketTravelDistance = ticket.TravelDistance;
            HpLoss = ticket.HpLoss;
        }
Exemplo n.º 3
0
        public JsonResult TravelSummary(int regionID, int?ticketQuality)
        {
            if (ticketQuality == null)
            {
                return(JsonError("You did not have chosen the ticket!"));
            }

            try
            {
                var region = regionRepository.GetById(regionID);

                var entity = SessionHelper.CurrentEntity;

                if (entity.Citizen == null)
                {
                    return(JsonError("You are not a citizen!"));
                }

                var citizen = entity.Citizen;

                var startRegion = regionRepository.GetById(citizen.RegionID);
                var endRegion   = regionRepository.GetById(regionID);

                var ticket = new MovingTicket(1, ticketQuality.Value);

                var path      = regionService.GetPathBetweenRegions(startRegion, endRegion, new DefaultRegionSelector(), new WarsPenaltyCostCalculator(citizen, warRepository, regionService));
                var canTravel = travelService.CanTravel(citizen, startRegion, endRegion, ticket);

                var vm = new TravelSummaryViewModel(canTravel, path, ticket);

                var content = RenderPartialToString("~/Views/Citizen/TravelSummary.cshtml", vm);

                return(Json(new JsonTravelSummary(content, canTravel.isSuccess)));
            }
            catch (Exception e)
            {
                return(JsonError(e));

                throw e; //we only logged the error
            }
        }
Exemplo n.º 4
0
        public ActionResult Travel(int regionID, int?ticketQuality)
        {
            var entity = SessionHelper.CurrentEntity;

            if (entity.Citizen == null)
            {
                return(RedirectToHomeWithError("You are not a citizen!"));
            }

            if (ticketQuality == null)
            {
                return(RedirectToHomeWithError("You have not chosen a ticket!"));
            }

            var ticket = equipmentRepository
                         .GetEquipmentItem(entity.EquipmentID.Value, (int)ProductTypeEnum.MovingTicket, ticketQuality.Value);

            if (ticket == null)
            {
                return(RedirectBackWithError("You do not have ticket of this quality"));
            }

            var movingTicket = new MovingTicket(ticket);

            var startRegion = regionRepository.GetById(entity.Citizen.RegionID);
            var endRegion   = regionRepository.GetById(regionID);

            if (travelService.CanTravel(entity.Citizen, startRegion, endRegion, movingTicket).IsError)
            {
                return(RedirectBackWithError("You cannot travel here!"));
            }

            travelService.Travel(entity.EntityID, startRegion, endRegion, movingTicket);

            AddInfo(string.Format("You successfuly moved to {0}", endRegion.Name));
            return(RedirectToAction("View", new { CitizenID = entity.EntityID }));
        }
Exemplo n.º 5
0
        public MethodResult CanTravel(Citizen citizen, Region startRegion, Region endRegion, MovingTicket ticket)
        {
            if (citizen.HitPoints < ticket.HpLoss)
            {
                return(new MethodResult("You do not have enough HP to travel!"));
            }

            if (startRegion.ID == endRegion.ID)
            {
                return(new MethodResult("You are actually in this region!"));
            }

            var item = citizen.Entity.GetEquipmentItem(ticket, productRepository);

            if (item.Amount == 0)
            {
                return(new MethodResult("You do not have this kind of moving ticket!"));
            }

            var path = regionService.GetPathBetweenRegions(startRegion, endRegion, new DefaultRegionSelector(), new WarsPenaltyCostCalculator(citizen, warRepository, regionService));

            if (path == null || path.Distance > ticket.TravelDistance)
            {
                return(new MethodResult("You cannot travel that distance with this type of moving ticket!"));
            }



            return(MethodResult.Success);
        }