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);
     }
 }