Beispiel #1
0
        public City Upgrade(City city, BuildingUpgradeCost upgradeCost)
        {
            if (upgradeCost == null)
            {
                city.Warehouse.MaxSilverStorageCapacity = (int)Math.Ceiling(city.Warehouse.MaxSilverStorageCapacity * 1.5);
                city.Warehouse.MaxStoneStorageCapacity  = (int)Math.Ceiling(city.Warehouse.MaxStoneStorageCapacity * 1.5);
                city.Warehouse.MaxWoodStorageCapacity   = (int)Math.Ceiling(city.Warehouse.MaxWoodStorageCapacity * 1.5);
                city.Warehouse.UpgradeCost    = upgradeCost;
                city.Warehouse.Stage         += 1;
                city.Warehouse.BuildingCostId = null;
            }
            else if (upgradeCost.BuildingStage != city.Warehouse.Stage)
            {
                throw new InvalidBuildingStageModificationException();
            }
            else
            {
                city.Warehouse.MaxSilverStorageCapacity = (int)Math.Ceiling(city.Warehouse.MaxSilverStorageCapacity * 1.5);
                city.Warehouse.MaxStoneStorageCapacity  = (int)Math.Ceiling(city.Warehouse.MaxStoneStorageCapacity * 1.5);
                city.Warehouse.MaxWoodStorageCapacity   = (int)Math.Ceiling(city.Warehouse.MaxWoodStorageCapacity * 1.5);
                city.Warehouse.UpgradeCost    = upgradeCost;
                city.Warehouse.Stage         += 1;
                city.Warehouse.BuildingCostId = upgradeCost.Id;
            }

            return(city);
        }
Beispiel #2
0
 public static BuildingUpgradeCost ModifyValues(this BuildingUpgradeCost previousCost, UpgradeCostCreationRequest newCost)
 {
     previousCost.UpgradeCost.Wood       = newCost.UpgradeCost.Wood;
     previousCost.UpgradeCost.Silver     = newCost.UpgradeCost.Silver;
     previousCost.UpgradeCost.Stone      = newCost.UpgradeCost.Stone;
     previousCost.UpgradeCost.Population = newCost.UpgradeCost.Population;
     // previousCost.UpgradeTime = TimeSpan.FromSeconds(newCost.UpgradeTimeInSeconds);
     return(previousCost);
 }
Beispiel #3
0
        public City Downgrade(City city, BuildingUpgradeCost upgradeCost)
        {
            if (upgradeCost.BuildingStage != city.Barrack.Stage)
            {
                throw new InvalidBuildingStageModificationException();
            }

            city.Barrack.UpgradeCost    = upgradeCost;
            city.Barrack.Stage         -= 1;
            city.Barrack.BuildingCostId = upgradeCost.Id;
            return(city);
        }
Beispiel #4
0
        public City Downgrade(City city, BuildingUpgradeCost upgradeCost)
        {
            if (upgradeCost.BuildingStage != city.StoneProduction.Stage)
            {
                throw new InvalidBuildingStageModificationException();
            }

            city.StoneProduction.ProductionAmount = (int)Math.Ceiling(city.StoneProduction.ProductionAmount / 1.2);
            city.StoneProduction.UpgradeCost      = upgradeCost;
            city.StoneProduction.Stage           -= 1;
            city.StoneProduction.BuildingCostId   = upgradeCost.Id;
            return(city);
        }
Beispiel #5
0
        public City Downgrade(City city, BuildingUpgradeCost upgradeCost)
        {
            if (upgradeCost.BuildingStage != city.Farm.Stage)
            {
                throw new InvalidBuildingStageModificationException();
            }

            city.Farm.MaxPopulation -= 200;
            city.Farm.UpgradeCost    = upgradeCost;
            city.Farm.Stage         -= 1;
            city.Farm.BuildingCostId = upgradeCost.Id;
            return(city);
        }
Beispiel #6
0
        public City Downgrade(City city, BuildingUpgradeCost upgradeCost)
        {
            if (upgradeCost.BuildingStage != city.CityHall.Stage)
            {
                throw new InvalidBuildingStageModificationException();
            }

            city.CityHall.UpgradeTimeReductionPercent -= 5;
            city.CityHall.UpgradeCost    = upgradeCost;
            city.CityHall.Stage         -= 1;
            city.CityHall.BuildingCostId = upgradeCost.Id;
            return(city);
        }
Beispiel #7
0
        public City Downgrade(City city, BuildingUpgradeCost upgradeCost)
        {
            if (upgradeCost.BuildingStage != city.CityWall.Stage)
            {
                throw new InvalidBuildingStageModificationException();
            }

            city.CityWall.DefensePoints -= 200;

            city.CityWall.UpgradeCost    = upgradeCost;
            city.CityWall.Stage         -= 1;
            city.CityWall.BuildingCostId = upgradeCost.Id;
            return(city);
        }
Beispiel #8
0
        public City Upgrade(City city, BuildingUpgradeCost upgradeCost)
        {
            if (upgradeCost == null)
            {
                city.Barrack.UpgradeCost    = upgradeCost;
                city.Barrack.Stage         += 1;
                city.Barrack.BuildingCostId = null;
            }
            else if (upgradeCost.BuildingStage - 2 != city.Barrack.Stage)
            {
                throw new InvalidBuildingStageModificationException();
            }
            else
            {
                city.Barrack.UpgradeCost    = upgradeCost;
                city.Barrack.Stage         += 1;
                city.Barrack.BuildingCostId = upgradeCost.Id;
            }


            return(city);
        }
Beispiel #9
0
 public City Upgrade(City city, BuildingUpgradeCost upgradeCost)
 {
     if (upgradeCost == null)
     {
         city.CityWall.DefensePoints += 200;
         city.CityWall.UpgradeCost    = upgradeCost;
         city.CityWall.Stage         += 1;
         city.CityWall.BuildingCostId = null;
     }
     else if (upgradeCost.BuildingStage != city.CityWall.Stage)
     {
         throw new InvalidBuildingStageModificationException();
     }
     else
     {
         city.CityWall.DefensePoints += 200;
         city.CityWall.UpgradeCost    = upgradeCost;
         city.CityWall.Stage         += 1;
         city.CityWall.BuildingCostId = upgradeCost.Id;
     }
     return(city);
 }
Beispiel #10
0
 public City Upgrade(City city, BuildingUpgradeCost upgradeCost)
 {
     if (upgradeCost == null)
     {
         city.StoneProduction.ProductionAmount = (int)Math.Ceiling(city.StoneProduction.ProductionAmount * 1.2);
         city.StoneProduction.UpgradeCost      = upgradeCost;
         city.StoneProduction.Stage           += 1;
         city.StoneProduction.BuildingCostId   = null;
     }
     else if (upgradeCost.BuildingStage != city.StoneProduction.Stage)
     {
         throw new InvalidBuildingStageModificationException();
     }
     else
     {
         city.StoneProduction.ProductionAmount = (int)Math.Ceiling(city.StoneProduction.ProductionAmount * 1.2);
         city.StoneProduction.UpgradeCost      = upgradeCost;
         city.StoneProduction.Stage           += 1;
         city.StoneProduction.BuildingCostId   = upgradeCost.Id;
     }
     return(city);
 }
Beispiel #11
0
 public City Upgrade(City city, BuildingUpgradeCost upgradeCost)
 {
     if (upgradeCost == null)
     {
         city.Farm.MaxPopulation += 200;
         city.Farm.UpgradeCost    = upgradeCost;
         city.Farm.Stage         += 1;
         city.Farm.BuildingCostId = null;
     }
     else if (upgradeCost.BuildingStage != city.Farm.Stage)
     {
         throw new InvalidBuildingStageModificationException();
     }
     else
     {
         city.Farm.MaxPopulation += 200;
         city.Farm.UpgradeCost    = upgradeCost;
         city.Farm.Stage         += 1;
         city.Farm.BuildingCostId = upgradeCost.Id;
     }
     return(city);
 }
Beispiel #12
0
 public City Upgrade(City city, BuildingUpgradeCost upgradeCost)
 {
     if (upgradeCost == null)
     {
         city.CityHall.UpgradeTimeReductionPercent += 5;
         city.CityHall.UpgradeCost    = upgradeCost;
         city.CityHall.Stage         += 1;
         city.CityHall.BuildingCostId = null;
     }
     else if (upgradeCost.BuildingStage != city.CityHall.Stage)
     {
         throw new InvalidBuildingStageModificationException();
     }
     else
     {
         city.CityHall.UpgradeTimeReductionPercent += 5;
         city.CityHall.UpgradeCost    = upgradeCost;
         city.CityHall.Stage         += 1;
         city.CityHall.BuildingCostId = upgradeCost.Id;
     }
     return(city);
 }
Beispiel #13
0
        public async Task CreateAsync(BuildingUpgradeCost upgradeCost)
        {
            await _db.BuildingUpgradeCosts.AddAsync(upgradeCost);

            var previousMaxStage = await _db.MaxBuildingStages
                                   .FirstOrDefaultAsync(cost => cost.BuildingName.Equals(upgradeCost.BuildingName));

            if (previousMaxStage != null)
            {
                previousMaxStage.MaxStage += 1;
                switch (upgradeCost.BuildingName)
                {
                case "CityWall":
                    var cityhalls = await _db.CityHalls
                                    .Where(x => x.BuildingCostId == null)
                                    .ToListAsync();

                    foreach (var cityHall in cityhalls)
                    {
                        cityHall.BuildingCostId = upgradeCost.Id;
                        cityHall.UpgradeCost    = upgradeCost;
                    }
                    break;

                case "Lumber":
                    var lumbers = await _db.ResourceProductions
                                  .Where(x => x.BuildingCostId == null && x.BuildingName.Equals("Lumber"))
                                  .ToListAsync();

                    foreach (var lumber in lumbers)
                    {
                        lumber.BuildingCostId = upgradeCost.Id;
                        lumber.UpgradeCost    = upgradeCost;
                    }
                    break;

                case "Farm":
                    var farms = await _db.Farms
                                .Where(x => x.BuildingCostId == null)
                                .ToListAsync();

                    foreach (var farm in farms)
                    {
                        farm.BuildingCostId = upgradeCost.Id;
                        farm.UpgradeCost    = upgradeCost;
                    }
                    break;

                case "Barrack":
                    var barracks = await _db.Barracks
                                   .Where(x => x.BuildingCostId == null)
                                   .ToListAsync();

                    foreach (var barrack in barracks)
                    {
                        barrack.BuildingCostId = upgradeCost.Id;
                        barrack.UpgradeCost    = upgradeCost;
                    }
                    break;

                case "Warehouse":
                    var warehouses = await _db.Warehouses
                                     .Where(x => x.BuildingCostId == null)
                                     .ToListAsync();

                    foreach (var warehouse in warehouses)
                    {
                        warehouse.BuildingCostId = upgradeCost.Id;
                        warehouse.UpgradeCost    = upgradeCost;
                    }
                    break;

                case "CityHall":
                    var cityHalls = await _db.CityHalls
                                    .Where(x => x.BuildingCostId == null)
                                    .ToListAsync();

                    foreach (var cityHall in cityHalls)
                    {
                        cityHall.BuildingCostId = upgradeCost.Id;
                        cityHall.UpgradeCost    = upgradeCost;
                    }
                    break;

                case "SilverMine":
                    var silverMines = await _db.ResourceProductions
                                      .Where(x => x.BuildingCostId == null && x.BuildingName.Equals("SilverMine"))
                                      .ToListAsync();

                    foreach (var silverMine in silverMines)
                    {
                        silverMine.BuildingCostId = upgradeCost.Id;
                        silverMine.UpgradeCost    = upgradeCost;
                    }
                    break;

                case "StoneMine":
                    var stoneMines = await _db.ResourceProductions
                                     .Where(x => x.BuildingCostId == null && x.BuildingName.Equals("StoneMine"))
                                     .ToListAsync();

                    foreach (var stoneMine in stoneMines)
                    {
                        stoneMine.BuildingCostId = upgradeCost.Id;
                        stoneMine.UpgradeCost    = upgradeCost;
                    }
                    break;

                default:
                    break;
                }
            }


            else
            {
                previousMaxStage = new MaxBuildingStage
                {
                    BuildingName = upgradeCost.BuildingName,
                    MaxStage     = 1
                };

                await _db.MaxBuildingStages.AddAsync(previousMaxStage);
            }
        }
Beispiel #14
0
        private async Task <City> CreateCity(ApplicationUser user)
        {
            //Get the upgrade costs which will be used to create the buildings
            BuildingUpgradeCost warehouseCost = await _unitOfWork.UpgradeCosts.FindUpgradeCost("Warehouse", 1);

            BuildingUpgradeCost silverMineCost = await _unitOfWork.UpgradeCosts.FindUpgradeCost("SilverMine", 1);

            BuildingUpgradeCost stoneMineCost = await _unitOfWork.UpgradeCosts.FindUpgradeCost("StoneMine", 1);

            BuildingUpgradeCost lumberCost = await _unitOfWork.UpgradeCosts.FindUpgradeCost("Lumber", 1);

            BuildingUpgradeCost farmCost = await _unitOfWork.UpgradeCosts.FindUpgradeCost("Farm", 1);

            BuildingUpgradeCost cityWallCost = await _unitOfWork.UpgradeCosts.FindUpgradeCost("CityWall", 1);

            BuildingUpgradeCost cityhallCost = await _unitOfWork.UpgradeCosts.FindUpgradeCost("CityHall", 1);

            BuildingUpgradeCost barrackCost = await _unitOfWork.UpgradeCosts.FindUpgradeCost("Barrack", 1);

            //Create the buildings
            Warehouse          warehouse  = Warehouse.Create(warehouseCost);
            ResourceProduction silverMine = ResourceProduction.CreateResourceProductionBuilding(silverMineCost);

            silverMine.ResourceType = ResourceType.silver;
            ResourceProduction stoneMine = ResourceProduction.CreateResourceProductionBuilding(stoneMineCost);

            stoneMine.ResourceType = ResourceType.stone;
            ResourceProduction lumber = ResourceProduction.CreateResourceProductionBuilding(lumberCost);

            lumber.ResourceType = ResourceType.wood;
            Farm     farm     = Farm.Create(farmCost);
            CityWall cityWall = CityWall.Create(cityWallCost);
            CityHall cityHall = CityHall.Create(cityhallCost);
            Barrack  barrack  = Barrack.Create(barrackCost);

            //Add the buildings to the city
            City city = new City
            {
                CityName  = $"{user.UserName}'s city",
                Resources = new Resources
                {
                    Wood       = 1000,
                    Stone      = 1000,
                    Silver     = 1000,
                    Population = 100
                },
                UserId             = user.Id,
                User               = user,
                SilverProductionId = silverMine.Id,
                SilverProduction   = silverMine,
                StoneProductionId  = stoneMine.Id,
                StoneProduction    = stoneMine,
                WoodProductionId   = lumber.Id,
                WoodProduction     = lumber,
                BarrackId          = barrack.Id,
                Barrack            = barrack,
                FarmId             = farm.Id,
                Farm               = farm,
                CityWallId         = cityWall.Id,
                CityWall           = cityWall,
                CityHallId         = cityHall.Id,
                CityHall           = cityHall,
                WarehouseId        = warehouse.Id,
                Warehouse          = warehouse
            };

            return(city);
        }