public async Task<int> GetTotalManufacturingTime(IndustryJob job, int runs) { var time = 0; time += await job.GetManufacturingTime(0.75, runs); var prints = await _blueprintRepository.GetBlueprintsAsync(); var materials = await job.GetMaterialNeeds(runs); foreach (var mat in materials) { var print = await _staticService.GetBlueprintInfoByProductTypeIdAsync(mat.TypeId); if (print == null) continue; var bp = prints.Where(p => p.TypeId == print.BlueprintId).OrderByDescending(p => p.MaterialEfficiency).FirstOrDefault(); if (bp == null) continue; time += await GetTotalManufacturingTime(new Domains.IndustryJob(print, bp), (int)(runs * mat.Quantity)); } return time; }
public async Task<IEnumerable<Material>> GetRawMaterials(IndustryJob job, long runs) { var list = new List<Material>(); var prints = await _blueprintRepository.GetBlueprintsAsync(); var materials = await job.GetMaterialNeeds((int)runs); foreach (var mat in materials) { var bpinfo = await _staticService.GetBlueprintInfoByProductTypeIdAsync(mat.TypeId); if (bpinfo == null) { list.Add(mat); continue; } var print = prints.OrderByDescending(p => p.MaterialEfficiency).FirstOrDefault(p => p.TypeId == bpinfo.BlueprintId); if (print == null) { list.Add(mat); continue; } var newJob = new IndustryJob(bpinfo, print); list.AddRange(await GetRawMaterials(newJob, mat.Quantity)); } return list; }