public BuildingUpgradeStatisticsCalculatorResponse CalculateStatistics( BuildingUpgradeStatisticsCalculatorRequest statisticsRequest) { if (statisticsRequest.BuildingUpgrades == null) return new BuildingUpgradeStatisticsCalculatorResponse(); foreach (var upgrade in statisticsRequest.BuildingUpgrades) { var durationRequest = new BuildingUpgradeDurationCalculatorRequest { BuildingUpgrade = upgrade, ProductTypes = statisticsRequest.ProductTypes, CityStorage = statisticsRequest.CityStorage.Clone(), DecrementPassedStorage = true }; upgrade.RemainingUpgradeTime = _buildingUpgradeCalculator.CalculateRemainingTime(durationRequest).RemainingUpgradeTime; } //need to go through each building upgrade and // calculate time left. // update product list with quantity left after storage return new BuildingUpgradeStatisticsCalculatorResponse(); }
public BuildingUpgradeStatisticsCalculatorResponse CalculateStatistics( BuildingUpgradeStatisticsCalculatorRequest statisticsRequest) { throw new System.NotImplementedException(); }
public BuildingUpgradeHandlerResponse CalculateBuildQueue(BuildingUpgradeHandlerRequest request) { //Early out if we don't have required data. if (request == null || request.City == null) return new BuildingUpgradeHandlerResponse { RequiredProductQueue = new Product[]{}, CityStorage = request != null && request.City != null ? request.City.CurrentCityStorage : new CityStorage(), PendingInventory = new Product[0], TotalProductQueue = new Product[0], RequiredProductsInCityStorageQueue = new Product[0], OrderedUpgrades = new BuildingUpgrade[0], AvailableStorage = new Product[0] }; _productTypes = GetProductTypes(request).Select(Mapper.Map<ProductType>).ToArray(); request.City.CurrentCityStorage.CurrentInventory = PopulateRequiredProducts(_productTypes, request.City.CurrentCityStorage.CurrentInventory); var handlerResponse = new BuildingUpgradeHandlerResponse { CityStorage = request.City.CurrentCityStorage, //Get property upgrade orders in the order requested (currently only sorted by shortest to longest duration) // should be able to sort by priority etc... OrderedUpgrades = ReorderUpgradesByDuration(request) }; //Get the list of inventory items from the orders including prerequisites to be queued. if (request.ReturnInventory) { var buildingUpgradeProductConsolidatorResponse = _buildingUpgradeProductConsolidator.GetConsolidatedProductQueue(new BuildingUpgradeProductConsoldatorRequest { BuildingUpgrades = handlerResponse.OrderedUpgrades, CityStorage = handlerResponse.CityStorage, ProductTypes = _productTypes }); handlerResponse.RequiredProductQueue = PopulateRequiredProducts(_productTypes, buildingUpgradeProductConsolidatorResponse.ConsolidatedRequiredProductQueue.ToArray()); handlerResponse.TotalProductQueue = PopulateRequiredProducts(_productTypes, buildingUpgradeProductConsolidatorResponse.ConsolidatedTotalProductQueue.ToArray()); handlerResponse.AvailableStorage = PopulateRequiredProducts(_productTypes, buildingUpgradeProductConsolidatorResponse.AvailableStorage.ToArray()); handlerResponse.RequiredProductsInCityStorageQueue = PopulateRequiredProducts(_productTypes, buildingUpgradeProductConsolidatorResponse.ConsolidatedRequiredProductsInStorage.ToArray()); } else { handlerResponse.RequiredProductQueue = new Product[0]; handlerResponse.TotalProductQueue = new Product[0]; handlerResponse.AvailableStorage = new Product[0]; handlerResponse.RequiredProductsInCityStorageQueue = new Product[0]; } if (request.CalculateBuidingUpgradeStatistics) { var statisticsRequest = new BuildingUpgradeStatisticsCalculatorRequest(); _buildingUpgradeStatisticsCalculator.CalculateStatistics(statisticsRequest); } //now create manufacturing order to be placed. // NOTE only creates one order where it maxes out supply chain limits. // List<LegacyProduct> pendingInventory; // var manufactingOrder = CreateManufacturingOrder(request, orderedInventoryQueue, out pendingInventory); return handlerResponse; }