public void Logic() { // main loop while (true) { JunctionInput current = null; // input loop while (current == null) { foreach (var input in Inputs) { if (!input.Line.EndSensor.Value) { current = input; break; } } Thread.Sleep(16); } current.Load(); Item currentItem = null; current.Line.Items.TryDequeue(out currentItem); JunctionOutput cout = Outputs[RoutingTable[currentItem.Dest]]; cout.Line.Items.Enqueue(currentItem); cout.Unload(); } }
public void Logic() { // throw new IndexOutOfRangeException(); // main loop while (true) { JunctionInput current = null; bool fromTop = false; // input loop while (current == null) { foreach (var input in TopInputs) { if (!input.Line.EndSensor.Value) { current = input; fromTop = true; break; } } if (current != null) { break; } foreach (var input in BottomInputs) { if (!input.Line.EndSensor.Value) { current = input; break; } } Thread.Sleep(16); } current.Load(); Item currentItem = null; current.Line.Items.TryDequeue(out currentItem); bool toTop = true; int outputIndex = RoutingTable[currentItem.Dest]; JunctionOutput cout; if (outputIndex >= TopOutputs.Length) { toTop = false; cout = BottomOutputs[outputIndex - TopOutputs.Length]; } else { cout = TopOutputs[outputIndex]; } if (toTop != fromTop) { if (toTop) { Top1.Value = true; Top2.Value = true; while (!AtUpSensor.Value) { Thread.Sleep(16); } Top1.Value = false; Top2.Value = false; } else { Bot1.Value = true; Bot2.Value = true; while (!AtDownSensor.Value) { Thread.Sleep(16); } Bot1.Value = false; Bot2.Value = false; } } cout.Line.Items.Enqueue(currentItem); // Console.WriteLine("Begin Unload"); cout.Unload(); // Console.WriteLine("End Unload"); } }