private void InitTraffic() { var unit = 1d; var sqrt5 = Math.Sqrt(5); var sqrt8 = Math.Sqrt(8); //var sqrt18 = Math.Sqrt(18); var terminatorPath = new TerminatorPath(); ///////////////////////////////////////////////////////////////////////// // Down var chooserDown = new StandardOutChooser(0.1, 0.5, 0.4); var sourceDown = new SourcePath(3 * unit, new SimpleCarFactory() { }) { AddTime = 0.3 }; var multiDown = new MultiOutPath(2 * unit, chooserDown); var preLeftDown = new SimplePath(sqrt5 * unit); var preRightDown = new SimplePath(sqrt5 * unit); var leftDown = new BlockingPath(6 * unit); var middleDown = new BlockingPath(7 * unit); var rightDown = new BlockingPath(5 * unit); var post1LeftDown = new SimplePath(2 * unit); var post2LeftDown = new SimplePath(sqrt8 * unit); var post1MiddleDown = new SimplePath(5 * unit); var post2MiddleDown = new SimplePath(2 * unit); var post3MiddleDown = new SimplePath(11 * unit); var postRightDown = new SimplePath(sqrt8 * unit); sourceDown.OutputPaths[0] = multiDown; multiDown.OutputPaths[0] = preLeftDown; multiDown.OutputPaths[1] = middleDown; multiDown.OutputPaths[2] = preRightDown; preLeftDown.OutputPaths[0] = leftDown; preRightDown.OutputPaths[0] = rightDown; leftDown.OutputPaths[0] = post1LeftDown; middleDown.OutputPaths[0] = post1MiddleDown; rightDown.OutputPaths[0] = postRightDown; post1LeftDown.OutputPaths[0] = post2LeftDown; post1MiddleDown.OutputPaths[0] = post2MiddleDown; post2MiddleDown.OutputPaths[0] = post3MiddleDown; post2LeftDown.OutputPaths[0] = terminatorPath; post3MiddleDown.OutputPaths[0] = terminatorPath; postRightDown.OutputPaths[0] = terminatorPath; // Up var chooserUp = new StandardOutChooser(0.2, 0.5, 0.3); var sourceUp = new SourcePath(3 * unit, new SimpleCarFactory() { }) { AddTime = 0.3 }; var multiUp = new MultiOutPath(2 * unit, chooserUp); var preLeftUp = new SimplePath(sqrt5 * unit); var preRightUp = new SimplePath(sqrt5 * unit); var leftUp = new BlockingPath(6 * unit); var middleUp = new BlockingPath(7 * unit); var rightUp = new BlockingPath(5 * unit); var post1LeftUp = new SimplePath(2 * unit); var post2LeftUp = new SimplePath(sqrt8 * unit); var post1MiddleUp = new SimplePath(5 * unit); var post2MiddleUp = new SimplePath(2 * unit); var post3MiddleUp = new SimplePath(11 * unit); var postRightUp = new SimplePath(sqrt8 * unit); sourceUp.OutputPaths[0] = multiUp; multiUp.OutputPaths[0] = preLeftUp; multiUp.OutputPaths[1] = middleUp; multiUp.OutputPaths[2] = preRightUp; preLeftUp.OutputPaths[0] = leftUp; preRightUp.OutputPaths[0] = rightUp; leftUp.OutputPaths[0] = post1LeftUp; middleUp.OutputPaths[0] = post1MiddleUp; rightUp.OutputPaths[0] = postRightUp; post1LeftUp.OutputPaths[0] = post2LeftUp; post1MiddleUp.OutputPaths[0] = post2MiddleUp; post2MiddleUp.OutputPaths[0] = post3MiddleUp; post2LeftUp.OutputPaths[0] = terminatorPath; post3MiddleUp.OutputPaths[0] = terminatorPath; postRightUp.OutputPaths[0] = terminatorPath; // Left var chooserLeft = new StandardOutChooser(0.4, 0.1, 0.5); var sourceLeft = new SourcePath(3 * unit, new SimpleCarFactory() { }) { AddTime = 0.3 }; var multiLeft = new MultiOutPath(2 * unit, chooserLeft); var preLeftLeft = new SimplePath(sqrt5 * unit); var preRightLeft = new SimplePath(sqrt5 * unit); var leftLeft = new BlockingPath(6 * unit); var middleLeft = new BlockingPath(7 * unit); var rightLeft = new BlockingPath(5 * unit); var post1LeftLeft = new SimplePath(2 * unit); var post2LeftLeft = new SimplePath(sqrt8 * unit); var post1MiddleLeft = new SimplePath(5 * unit); var post2MiddleLeft = new SimplePath(2 * unit); var post3MiddleLeft = new SimplePath(11 * unit); var postRightLeft = new SimplePath(sqrt8 * unit); sourceLeft.OutputPaths[0] = multiLeft; multiLeft.OutputPaths[0] = preLeftLeft; multiLeft.OutputPaths[1] = middleLeft; multiLeft.OutputPaths[2] = preRightLeft; preLeftLeft.OutputPaths[0] = leftLeft; preRightLeft.OutputPaths[0] = rightLeft; leftLeft.OutputPaths[0] = post1LeftLeft; middleLeft.OutputPaths[0] = post1MiddleLeft; rightLeft.OutputPaths[0] = postRightLeft; post1LeftLeft.OutputPaths[0] = post2LeftLeft; post1MiddleLeft.OutputPaths[0] = post2MiddleLeft; post2MiddleLeft.OutputPaths[0] = post3MiddleLeft; post2LeftLeft.OutputPaths[0] = terminatorPath; post3MiddleLeft.OutputPaths[0] = terminatorPath; postRightLeft.OutputPaths[0] = terminatorPath; // Right var chooserRight = new StandardOutChooser(0.2, 0.3, 0.5); var sourceRight = new SourcePath(3 * unit, new SimpleCarFactory() { }) { AddTime = 0.3 }; var multiRight = new MultiOutPath(2 * unit, chooserRight); var preLeftRight = new SimplePath(sqrt5 * unit); var preRightRight = new SimplePath(sqrt5 * unit); var leftRight = new BlockingPath(6 * unit); var middleRight = new BlockingPath(7 * unit); var rightRight = new BlockingPath(5 * unit); var post1LeftRight = new SimplePath(2 * unit); var post2LeftRight = new SimplePath(sqrt8 * unit); var post1MiddleRight = new SimplePath(5 * unit); var post2MiddleRight = new SimplePath(2 * unit); var post3MiddleRight = new SimplePath(11 * unit); var postRightRight = new SimplePath(sqrt8 * unit); sourceRight.OutputPaths[0] = multiRight; multiRight.OutputPaths[0] = preLeftRight; multiRight.OutputPaths[1] = middleRight; multiRight.OutputPaths[2] = preRightRight; preLeftRight.OutputPaths[0] = leftRight; preRightRight.OutputPaths[0] = rightRight; leftRight.OutputPaths[0] = post1LeftRight; middleRight.OutputPaths[0] = post1MiddleRight; rightRight.OutputPaths[0] = postRightRight; post1LeftRight.OutputPaths[0] = post2LeftRight; post1MiddleRight.OutputPaths[0] = post2MiddleRight; post2MiddleRight.OutputPaths[0] = post3MiddleRight; post2LeftRight.OutputPaths[0] = terminatorPath; post3MiddleRight.OutputPaths[0] = terminatorPath; postRightRight.OutputPaths[0] = terminatorPath; // Inter connections post2LeftDown.OutputPaths[0] = post2MiddleRight; post2LeftUp.OutputPaths[0] = post2MiddleLeft; post2LeftLeft.OutputPaths[0] = post2MiddleDown; post2LeftRight.OutputPaths[0] = post2MiddleUp; postRightDown.OutputPaths[0] = post3MiddleLeft; postRightUp.OutputPaths[0] = post3MiddleRight; postRightLeft.OutputPaths[0] = post3MiddleUp; postRightRight.OutputPaths[0] = post3MiddleDown; ///////////////////////////////////////////////////////////////////////////// var groupUD = new LightGroup(false, 3, 9); var groupUDL = new LightGroup(true, 6, 3, 3); var groupLR = new LightGroup(true, 3, 3, 6); var groupLRL = new LightGroup(true, 9, 3); groupUD.AddPath(rightDown); groupUD.AddPath(rightUp); groupUD.AddPath(middleDown); groupUD.AddPath(middleUp); groupUDL.AddPath(leftDown); groupUDL.AddPath(leftUp); groupLR.AddPath(rightRight); groupLR.AddPath(rightLeft); groupLR.AddPath(middleRight); groupLR.AddPath(middleLeft); groupLRL.AddPath(leftRight); groupLRL.AddPath(leftLeft); var system = new LightSystem(12, groupUD, groupUDL, groupLR, groupLRL); updater = new Updater(); // Down updater.AddPath(sourceDown); updater.AddPath(multiDown); updater.AddPath(preLeftDown); updater.AddPath(preRightDown); updater.AddPath(leftDown); updater.AddPath(middleDown); updater.AddPath(rightDown); updater.AddPath(post1LeftDown); updater.AddPath(post2LeftDown); updater.AddPath(post1MiddleDown); updater.AddPath(post2MiddleDown); updater.AddPath(post3MiddleDown); updater.AddPath(postRightDown); // Up updater.AddPath(sourceUp); updater.AddPath(multiUp); updater.AddPath(preLeftUp); updater.AddPath(preRightUp); updater.AddPath(leftUp); updater.AddPath(middleUp); updater.AddPath(rightUp); updater.AddPath(post1LeftUp); updater.AddPath(post2LeftUp); updater.AddPath(post1MiddleUp); updater.AddPath(post2MiddleUp); updater.AddPath(post3MiddleUp); updater.AddPath(postRightUp); // Left updater.AddPath(sourceLeft); updater.AddPath(multiLeft); updater.AddPath(preLeftLeft); updater.AddPath(preRightLeft); updater.AddPath(leftLeft); updater.AddPath(middleLeft); updater.AddPath(rightLeft); updater.AddPath(post1LeftLeft); updater.AddPath(post2LeftLeft); updater.AddPath(post1MiddleLeft); updater.AddPath(post2MiddleLeft); updater.AddPath(post3MiddleLeft); updater.AddPath(postRightLeft); // Right updater.AddPath(sourceRight); updater.AddPath(multiRight); updater.AddPath(preLeftRight); updater.AddPath(preRightRight); updater.AddPath(leftRight); updater.AddPath(middleRight); updater.AddPath(rightRight); updater.AddPath(post1LeftRight); updater.AddPath(post2LeftRight); updater.AddPath(post1MiddleRight); updater.AddPath(post2MiddleRight); updater.AddPath(post3MiddleRight); updater.AddPath(postRightRight); updater.AddLightSystem(system); var x = 250; var y = 250; var gunit = 15; // Down TrafficControl.AddPath(sourceDown, x + 1 * gunit, y + 15 * gunit, x + 1 * gunit, y + 12 * gunit); TrafficControl.AddPath(multiDown, x + 1 * gunit, y + 12 * gunit, x + 1 * gunit, y + 10 * gunit); TrafficControl.AddPath(preLeftDown, x + 1 * gunit, y + 10 * gunit, x + 0 * gunit, y + 8 * gunit); TrafficControl.AddPath(preRightDown, x + 1 * gunit, y + 10 * gunit, x + 2 * gunit, y + 8 * gunit); TrafficControl.AddPath(leftDown, x + 0 * gunit, y + 8 * gunit, x + 0 * gunit, y + 3 * gunit); TrafficControl.AddPath(middleDown, x + 1 * gunit, y + 10 * gunit, x + 1 * gunit, y + 3 * gunit); TrafficControl.AddPath(rightDown, x + 2 * gunit, y + 8 * gunit, x + 2 * gunit, y + 3 * gunit); TrafficControl.AddPath(post1LeftDown, x + 0 * gunit, y + 3 * gunit, x + 0 * gunit, y + 1 * gunit); TrafficControl.AddPath(post2LeftDown, x + 0 * gunit, y + 1 * gunit, x + -2 * gunit, y + -1 * gunit); TrafficControl.AddPath(post1MiddleDown, x + 1 * gunit, y + 3 * gunit, x + 1 * gunit, y + -2 * gunit); TrafficControl.AddPath(post2MiddleDown, x + 1 * gunit, y + -2 * gunit, x + 1 * gunit, y + -4 * gunit); TrafficControl.AddPath(post3MiddleDown, x + 1 * gunit, y + -4 * gunit, x + 1 * gunit, y + -15 * gunit); TrafficControl.AddPath(postRightDown, x + 2 * gunit, y + 3 * gunit, x + 4 * gunit, y + 1 * gunit); // Up TrafficControl.AddPath(sourceUp, x + -1 * gunit, y + -15 * gunit, x + -1 * gunit, y + -12 * gunit); TrafficControl.AddPath(multiUp, x + -1 * gunit, y + -12 * gunit, x + -1 * gunit, y + -10 * gunit); TrafficControl.AddPath(preLeftUp, x + -1 * gunit, y + -10 * gunit, x + 0 * gunit, y + -8 * gunit); TrafficControl.AddPath(preRightUp, x + -1 * gunit, y + -10 * gunit, x + -2 * gunit, y + -8 * gunit); TrafficControl.AddPath(leftUp, x + 0 * gunit, y + -8 * gunit, x + 0 * gunit, y + -3 * gunit); TrafficControl.AddPath(middleUp, x + -1 * gunit, y + -10 * gunit, x + -1 * gunit, y + -3 * gunit); TrafficControl.AddPath(rightUp, x + -2 * gunit, y + -8 * gunit, x + -2 * gunit, y + -3 * gunit); TrafficControl.AddPath(post1LeftUp, x + 0 * gunit, y + -3 * gunit, x + 0 * gunit, y + -1 * gunit); TrafficControl.AddPath(post2LeftUp, x + 0 * gunit, y + -1 * gunit, x + 2 * gunit, y + 1 * gunit); TrafficControl.AddPath(post1MiddleUp, x + -1 * gunit, y + -3 * gunit, x + -1 * gunit, y + 2 * gunit); TrafficControl.AddPath(post2MiddleUp, x + -1 * gunit, y + 2 * gunit, x + -1 * gunit, y + 4 * gunit); TrafficControl.AddPath(post3MiddleUp, x + -1 * gunit, y + 4 * gunit, x + -1 * gunit, y + 15 * gunit); TrafficControl.AddPath(postRightUp, x + -2 * gunit, y + -3 * gunit, x + -4 * gunit, y + -1 * gunit); // Left TrafficControl.AddPath(sourceLeft, x + -15 * gunit, y + 1 * gunit, x + -12 * gunit, y + 1 * gunit); TrafficControl.AddPath(multiLeft, x + -12 * gunit, y + 1 * gunit, x + -10 * gunit, y + 1 * gunit); TrafficControl.AddPath(preLeftLeft, x + -10 * gunit, y + 1 * gunit, x + -8 * gunit, y + 0 * gunit); TrafficControl.AddPath(preRightLeft, x + -10 * gunit, y + 1 * gunit, x + -8 * gunit, y + 2 * gunit); TrafficControl.AddPath(leftLeft, x + -8 * gunit, y + 0 * gunit, x + -3 * gunit, y + 0 * gunit); TrafficControl.AddPath(middleLeft, x + -10 * gunit, y + 1 * gunit, x + -3 * gunit, y + 1 * gunit); TrafficControl.AddPath(rightLeft, x + -8 * gunit, y + 2 * gunit, x + -3 * gunit, y + 2 * gunit); TrafficControl.AddPath(post1LeftLeft, x + -3 * gunit, y + 0 * gunit, x + -1 * gunit, y + 0 * gunit); TrafficControl.AddPath(post2LeftLeft, x + -1 * gunit, y + 0 * gunit, x + 1 * gunit, y + -2 * gunit); TrafficControl.AddPath(post1MiddleLeft, x + -3 * gunit, y + 1 * gunit, x + 2 * gunit, y + 1 * gunit); TrafficControl.AddPath(post2MiddleLeft, x + 2 * gunit, y + 1 * gunit, x + 4 * gunit, y + 1 * gunit); TrafficControl.AddPath(post3MiddleLeft, x + 4 * gunit, y + 1 * gunit, x + 15 * gunit, y + 1 * gunit); TrafficControl.AddPath(postRightLeft, x + -3 * gunit, y + 2 * gunit, x + -1 * gunit, y + 4 * gunit); // Right TrafficControl.AddPath(sourceRight, x + 15 * gunit, y + -1 * gunit, x + 12 * gunit, y + -1 * gunit); TrafficControl.AddPath(multiRight, x + 12 * gunit, y + -1 * gunit, x + 10 * gunit, y + -1 * gunit); TrafficControl.AddPath(preLeftRight, x + 10 * gunit, y + -1 * gunit, x + 8 * gunit, y + 0 * gunit); TrafficControl.AddPath(preRightRight, x + 10 * gunit, y + -1 * gunit, x + 8 * gunit, y + -2 * gunit); TrafficControl.AddPath(leftRight, x + 8 * gunit, y + 0 * gunit, x + 3 * gunit, y + 0 * gunit); TrafficControl.AddPath(middleRight, x + 10 * gunit, y + -1 * gunit, x + 3 * gunit, y + -1 * gunit); TrafficControl.AddPath(rightRight, x + 8 * gunit, y + -2 * gunit, x + 3 * gunit, y + -2 * gunit); TrafficControl.AddPath(post1LeftRight, x + 3 * gunit, y + 0 * gunit, x + 1 * gunit, y + 0 * gunit); TrafficControl.AddPath(post2LeftRight, x + 1 * gunit, y + 0 * gunit, x + -1 * gunit, y + 2 * gunit); TrafficControl.AddPath(post1MiddleRight, x + 3 * gunit, y + -1 * gunit, x + -2 * gunit, y + -1 * gunit); TrafficControl.AddPath(post2MiddleRight, x + -2 * gunit, y + -1 * gunit, x + -4 * gunit, y + -1 * gunit); TrafficControl.AddPath(post3MiddleRight, x + -4 * gunit, y + -1 * gunit, x + -15 * gunit, y + -1 * gunit); TrafficControl.AddPath(postRightRight, x + 3 * gunit, y + -2 * gunit, x + 1 * gunit, y + -4 * gunit); sourcepathcontrolUp.SourcePath = sourceUp; sourcepathcontrolDown.SourcePath = sourceDown; sourcepathcontrolLeft.SourcePath = sourceLeft; sourcepathcontrolRight.SourcePath = sourceRight; standardchoosercontrolDown.Chooser = chooserDown; standardchoosercontrolUp.Chooser = chooserUp; standardchoosercontrolLeft.Chooser = chooserLeft; standardchoosercontrolRight.Chooser = chooserRight; updater.Ticked += trafficcontrol1.QueueDraw; Show (); }
public void AddPath(BlockingPath path) { paths.Add(path); actual++; }