Example #1
0
        public async Task <HiredUnitsAndCostModel> AddSoldiersAsync(HireSoldiersInputModel input)
        {
            var city      = this.cityRepo.All().FirstOrDefault(x => x.Id == input.CityId);
            var archers   = this.archersRepo.All().FirstOrDefault(x => x.CityId == input.CityId);
            var cavalry   = this.cavalryRepo.All().FirstOrDefault(x => x.CityId == input.CityId);
            var artillery = this.artilleryRepo.All().FirstOrDefault(x => x.CityId == input.CityId);
            var infantry  = this.infantryRepo.All().FirstOrDefault(x => x.CityId == input.CityId);

            var currentSilver = city.Silver;
            var currentWood   = city.Wood;

            var silverNeeded = (input.ArcherQuantity * GlobalConstants.ArcherSilverCost) +
                               (input.InfantryQuantity * GlobalConstants.InfantrySilverCost) +
                               (input.CavalryQuantity * GlobalConstants.CavalrySilverCost) +
                               (input.ArtilleryQuantity * GlobalConstants.ArtillerySilverCost);

            var woodNeeded = (input.ArcherQuantity * GlobalConstants.ArcherWoodCost) +
                             (input.InfantryQuantity * GlobalConstants.InfantryWoodCost) +
                             (input.CavalryQuantity * GlobalConstants.CavalryWoodCost) +
                             (input.ArtilleryQuantity * GlobalConstants.ArcherWoodCost);

            var viewData = new HiredUnitsAndCostModel();

            if (silverNeeded <= currentSilver && woodNeeded <= currentWood)
            {
                artillery.Count += input.ArtilleryQuantity;
                infantry.Count  += input.InfantryQuantity;
                cavalry.Count   += input.CavalryQuantity;
                archers.Count   += input.ArcherQuantity;

                city.Silver -= silverNeeded;
                city.Wood   -= woodNeeded;
                await this.cityRepo.SaveChangesAsync();

                await this.artilleryRepo.SaveChangesAsync();

                await this.cavalryRepo.SaveChangesAsync();

                await this.archersRepo.SaveChangesAsync();

                var unitType = string.Empty;

                viewData.SilverAvailable = city.Silver;
                viewData.StoneAvailable  = city.Stone;
                viewData.WoodAvailable   = city.Wood;

                if (input.ArcherQuantity > 0)
                {
                    viewData.UnitType     = "Archers";
                    viewData.UnitQuantity = archers.Count;
                }
                else if (input.InfantryQuantity > 0)
                {
                    viewData.UnitType     = "Infantry";
                    viewData.UnitQuantity = infantry.Count;
                }
                else if (input.CavalryQuantity > 0)
                {
                    viewData.UnitType     = "Cavalry";
                    viewData.UnitQuantity = cavalry.Count;
                }
                else if (input.ArtilleryQuantity > 0)
                {
                    viewData.UnitType     = "Artillery";
                    viewData.UnitQuantity = artillery.Count;
                }

                return(viewData);
            }

            return(null);
        }
Example #2
0
        public async Task <HiredUnitsAndCostModel> Hire(HireSoldiersInputModel input)
        {
            var result = await this.barrackService.AddSoldiersAsync(input);

            return(result);
        }