예제 #1
0
        Holding GenerateHolding(INameGenerator generator, string provinceId)
        {
            Province province     = provinces[provinceId];
            Array    holdingTypes = Enum.GetValues(typeof(HoldingType));

            HoldingType holdingType = (HoldingType)holdingTypes.GetValue(random.Next(1, holdingTypes.Length));
            string      name        = generator.GenerateName();

            Holding holding = new Holding
            {
                Id          = $"h_{name.Replace(" ", "_").ToLower()}",
                ProvinceId  = province.Id,
                Name        = name,
                Description = $"The {name} {holdingType.ToString().ToLower()}", // TODO: Better description
                Type        = holdingType
            };

            // TODO: Make sure this never happens and then remove this workaround
            while (holdings.Values.Any(h => h.Id == holding.Id))
            {
                return(GenerateHolding(generator, province.Id));
            }

            return(holding);
        }
예제 #2
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,TypeName")] HoldingType holdingType)
        {
            if (id != holdingType.Id)
            {
                return(NotFound());
            }
            bool IsHoldingTypeExist = _context.HoldingType.Any
                                          (x => x.TypeName == holdingType.TypeName && x.Id != holdingType.Id);

            if (IsHoldingTypeExist == true)
            {
                ModelState.AddModelError("TypeName", "Holding Type already exists");
            }
            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(holdingType);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!HoldingTypeExists(holdingType.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(holdingType));
        }
예제 #3
0
        /// <summary>
        /// Adds the specified holding type in a province.
        /// </summary>
        /// <param name="provinceId">Province identifier.</param>
        /// <param name="holdingType">Holding type.</param>
        public void AddHolding(string provinceId, HoldingType holdingType)
        {
            Holding emptySlot = holdings.Values.FirstOrDefault(h => h.ProvinceId == provinceId &&
                                                               h.Type == HoldingType.Empty);

            if (emptySlot != null)
            {
                emptySlot.Type = holdingType;
            }
        }
예제 #4
0
        /// <summary>
        /// Builds the specified holding type in a province.
        /// </summary>
        /// <param name="provinceId">Province identifier.</param>
        /// <param name="holdingType">Holding type.</param>
        public void BuildHolding(string provinceId, HoldingType holdingType)
        {
            Province province = GetProvince(provinceId);


            if (ProvinceHasEmptyHoldingSlots(provinceId))
            {
                world.AddHolding(provinceId, holdingType);
                GetFaction(province.FactionId).Wealth -= GetWorld().HoldingsPrice;
            }
        }
예제 #5
0
        public async Task <IActionResult> Create([Bind("Id,TypeName")] HoldingType holdingType)
        {
            bool IsHoldingTypeExist = _context.HoldingType.Any
                                          (x => x.TypeName == holdingType.TypeName && x.Id != holdingType.Id);

            if (IsHoldingTypeExist == true)
            {
                ModelState.AddModelError("TypeName", "Holding Type already exists");
            }
            if (ModelState.IsValid)
            {
                _context.Add(holdingType);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(holdingType));
        }
예제 #6
0
        void AiBuild(string factionId)
        {
            Faction faction = GetFaction(factionId);

            // TODO: Reduce all this duplicated code

            while (faction.Wealth >= GetWorld().HoldingsPrice)
            {
                List <Province> validSovereignProvinces = GetFactionProvinces(factionId).Where(r => r.State == ProvinceState.Sovereign &&
                                                                                               ProvinceHasEmptyHoldingSlots(r.Id)).ToList();

                if (validSovereignProvinces.Count < 1)
                {
                    break;
                }

                HoldingType type = Enum.GetValues(typeof(HoldingType)).Cast <HoldingType>().Where(x => x != HoldingType.Empty).GetRandomElement();

                BuildHolding(validSovereignProvinces.GetRandomElement().Id, type);
            }

            while (faction.Wealth >= GetWorld().HoldingsPrice)
            {
                List <Province> validOccupiedProvinces = GetFactionProvinces(factionId).Where(r => r.State == ProvinceState.Occupied &&
                                                                                              ProvinceHasEmptyHoldingSlots(r.Id)).ToList();

                if (validOccupiedProvinces.Count < 1)
                {
                    break;
                }

                HoldingType type = Enum.GetValues(typeof(HoldingType)).Cast <HoldingType>().Where(x => x != HoldingType.Empty).GetRandomElement();

                BuildHolding(validOccupiedProvinces.GetRandomElement().Id, type);
            }
        }