public static void MoveBags(int totalnr) { if (TerminalNode.counter + Storage.GetNumberOfBagsInStorage() == totalnr) { IsSimulationFinished = true; } if (First != null) { if (current.Next != null && !(current is GateNode)) { bool check = true; switch (current.Next) { case ConveyorNode NextNode when current is CheckinNode checkidNode: { if (checkidNode._bagsQueue.Count > 0 && NextNode.IsFull == false) { NextNode.PushBagToConveyorBelt(checkidNode.Remove()); Node.log.Add("Added bag to " + NextNode.Id); } break; } case SecurityNode nextNode when current is ConveyorNode conveyorNode: { if (!(nextNode.Next as ConveyorNode).IsFull || !(conveyorNode.IsEmpty())) { var bagToCheck = conveyorNode.RemoveBagFromConveyorBelt(); if (bagToCheck != null) { var bagChecked = nextNode.ScanBagSecurity(bagToCheck); if (bagChecked != null) { ((ConveyorNode)(nextNode.Next)).PushBagToConveyorBelt(bagChecked); } else { current = first; check = false; } } else { current = first; check = false; } } break; } case BagSortNode node when current is ConveyorNode conveyorNode: { if (!conveyorNode.IsEmpty() && !IsSimulationFinished) { var con = (ConveyorNode)(node.determineNextNode(conveyorNode.ListofBagsinqueue().Peek())); con.PushBagToConveyorBelt(conveyorNode.RemoveBagFromConveyorBelt()); current = con; check = false; //var tbag = conveyorNode.RemoveBagFromConveyorBelt(); //if (tbag != null) //{ // check = true; // node.PassBag(tbag); //} } break; } case TerminalNode terminalNode when current is ConveyorNode conveyorNode: { if (!conveyorNode.IsEmpty() && !IsSimulationFinished) { ConveyorNode con = (ConveyorNode)(terminalNode.determineNextNode(conveyorNode.ListofBagsinqueue() .Peek())); con.PushBagToConveyorBelt(conveyorNode.RemoveBagFromConveyorBelt()); current = con; check = false; //var tbag = conveyorNode.RemoveBagFromConveyorBelt(); //if (tbag != null) //{ // check = true; // node.PassBag(tbag); //} } break; } case GateNode gateNode when current is ConveyorNode conveyorNode: { if (!conveyorNode.IsEmpty() && !IsSimulationFinished) { gateNode.AddBag(conveyorNode.RemoveBagFromConveyorBelt()); //var tbag = conveyorNode.RemoveBagFromConveyorBelt(); //if (tbag != null) //{ // check = true; // node.PassBag(tbag); //} } if (((CheckinNode)First)._bagsQueue.Count > 0) { current = First; check = false; } break; } case ConveyorNode NextNode when current is ConveyorNode conveyorNode: //err 1 { if (!conveyorNode.IsEmpty() && NextNode.IsEmpty()) { if (NextNode.IsFull == false) { NextNode.PushBagToConveyorBelt(conveyorNode .RemoveBagFromConveyorBelt()); } } break; } } if (check) { current = current.Next; } } } else { throw new Exception("no simulation made"); } }