private static List <HardwareUnit> FillTransporter(Transporter transporter, List <HardwareNeeded> hardwareToFillTransporterWithOrderedByUtilityPerKilogram) { List <HardwareUnit> hardwareAddedToTransporter = new List <HardwareUnit>(); uint hardwareCounter = 0; foreach (HardwareNeeded hardware in hardwareToFillTransporterWithOrderedByUtilityPerKilogram) { while (hardwareCounter < hardware.AmountNeeded) { var hwUnit = new HardwareUnit(hardware, hardwareCounter); if (transporter.AddHardware(hwUnit)) { hardwareAddedToTransporter.Add(hwUnit); hardwareCounter++; } else { // does not fit into transporter anymore - maybe we could still add something that has the next biggest utilityperKilogram but weighs less - there for just break and not return break; } } hardwareCounter = 0; } return(hardwareAddedToTransporter); }
public bool AddHardware(HardwareUnit hwUnit) { if ((this.ContentWeight + hwUnit.Weight) <= this.Capacity) { this.UtilityTransporting += hwUnit.Utility; this.ContentWeight += hwUnit.Weight; this.hardwareTransporting.Add(hwUnit); return(true); } else { //throw new InvalidOperationException($"transporter cannot add further hardware: {hardware.Name}because the weight: {hardware.Weight} does not fit into the remaining {this.Capacity - this.ContentWeight}"); return(false); } }