Exemple #1
0
        public void MyTestInitialize()
        {
            CTCController ctc             = CTCController.GetCTCController();
            PrivateObject privateAccessor = new PrivateObject(ctc);

            m_ctcAccessor = new CTCController_Accessor(privateAccessor);

            List <TrackBlock> trackRegion = new List <TrackBlock>();
            TrackBlock        redBlock1   = new TrackBlock("red1", TrackOrientation.EastWest, new Point(0, 0), 50.0, 0.25, 0.5,
                                                           false, false, 40, TrackAllowedDirection.Both, false, "redController1", null, null, "red2");

            trackRegion.Add(redBlock1);
            TrackBlock redBlock2 = new TrackBlock("red2", TrackOrientation.SouthWestNorthEast, redBlock1.EndPoint, 50.0, 0.75, 1,
                                                  false, false, 40, TrackAllowedDirection.Both, false, "redController1", "redController2", "red1", "red3");

            trackRegion.Add(redBlock2);
            TrackBlock redBlock3 = new TrackBlock("red3", TrackOrientation.NorthSouth, redBlock2.EndPoint, 50.0, 1.50, 1.5,
                                                  false, false, 40, TrackAllowedDirection.Both, false, "redController2", "redController1", "red2", "red4");

            trackRegion.Add(redBlock3);
            TrackBlock redBlock4 = new TrackBlock("red4", TrackOrientation.SouthWestNorthEast, redBlock3.EndPoint, 50.0, 2.5, 2,
                                                  false, false, 40, TrackAllowedDirection.Both, false, "redController2", null, "red3", "red5");

            trackRegion.Add(redBlock4);
            m_ctcAccessor.BuildLayout(trackRegion, new List <TrackSwitch>()); // update this for switches
        }
Exemple #2
0
        public void TrackBlockConstructorTest()
        {
            TrackOrientation orientation  = TrackOrientation.EastWest;
            string           name         = "TestBlock";
            double           length       = 3.5;
            double           endElevation = 1.5;
            double           grade        = 1;
            int   staticSpeed             = 75;
            bool  tunnel           = false;
            bool  railroadCrossing = false;
            Point startPoint       = new Point(0, 0);

            TrackBlock target = new TrackBlock(name, orientation, startPoint, length, endElevation, grade, false, true, staticSpeed, TrackAllowedDirection.Both, false, "controller", "controller2", "prevBlock", "nextBlock");

            target.Transponder = new Transponder("Station1", 2);
            Assert.AreEqual(orientation, target.Orientation);
            Assert.AreEqual(length, target.LengthMeters);
            Assert.IsFalse(target.HasTunnel);
            Assert.IsNotNull(target.Transponder);
            Assert.AreEqual("Station1", target.Transponder.StationName);
            Assert.AreEqual(name, target.Name);
            Assert.AreEqual(2, target.Transponder.DistanceToStation);
            Assert.AreEqual(startPoint.X, target.StartPoint.X);
            Assert.AreEqual(startPoint.Y, startPoint.Y);
            Assert.AreEqual(grade, target.Grade);
            Assert.AreEqual(endElevation, target.EndElevationMeters);
        }
Exemple #3
0
        static void Main()
        {
            TrackBlock redBlock1 = new TrackBlock("red1", TrackOrientation.EastWest, new Point(35, 0), 50.0, 0, 0,
                                                  false, false, 40, TrackAllowedDirection.Both, null, "redController1", null, "red8", "red2");
            TrackBlock redBlock2 = new TrackBlock("red2", TrackOrientation.NorthWestSouthEast, new Point(85, 0), 50.0, 0, 0,
                                                  false, false, 40, TrackAllowedDirection.Both, null, "redController1", null, "red1", "red3");
            TrackBlock redBlock3 = new TrackBlock("red3", TrackOrientation.NorthSouth, new Point(121, 85), 50.0, 0, 0,
                                                  false, false, 40, TrackAllowedDirection.Both, null, "redController1", null, "red2", "red4");
            TrackBlock redBlock4 = new TrackBlock("red4", TrackOrientation.SouthWestNorthEast, new Point(85, 121), 50.0, 0, 0,
                                                  false, false, 40, TrackAllowedDirection.Both, null, "redController1", null, "red3", "red5");
            TrackBlock redBlock5 = new TrackBlock("red5", TrackOrientation.EastWest, new Point(35, 121), 50.0, 0, 0,
                                                  false, false, 40, TrackAllowedDirection.Both, null, "redController1", null, "red4", "red6");
            TrackBlock redBlock6 = new TrackBlock("red6", TrackOrientation.NorthWestSouthEast, new Point(0, 85), 50.0, 0, 0,
                                                  false, false, 40, TrackAllowedDirection.Both, null, "redController1", null, "red5", "red7");
            TrackBlock redBlock7 = new TrackBlock("red7", TrackOrientation.NorthSouth, new Point(0, 85), 50.0, 0, 0,
                                                  false, false, 40, TrackAllowedDirection.Both, null, "redController1", null, "red6", "red8");
            TrackBlock redBlock8 = new TrackBlock("red8", TrackOrientation.SouthWestNorthEast, new Point(0, 35), 50.0, 0, 0,
                                                  false, false, 40, TrackAllowedDirection.Both, null, "redController1", null, "red7", "red1");

            redBlock1.NextBlock = redBlock2;
            redBlock2.NextBlock = redBlock3;
            redBlock3.NextBlock = redBlock4;
            redBlock4.NextBlock = redBlock5;
            redBlock5.NextBlock = redBlock6;
            redBlock6.NextBlock = redBlock7;
            redBlock7.NextBlock = redBlock8;
            redBlock8.NextBlock = redBlock1;
            ITrain t = new Train("Train1", redBlock1, Direction.East);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new TrainForm(t));
            System.AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
        }
Exemple #4
0
 /// <summary>
 /// Displays info about the train yard
 /// </summary>
 /// <param name="b">Track block</param>
 public void SetTrainYardInfo(TrackBlock b)
 {
     //Just show the block name
     m_displayedTrain = null;
     m_displayedBlock = b;
     SetInfo(b.Name, null);
 }
        /// <summary>
        /// Sets the selected track block, or clears it if null
        /// </summary>
        /// <param name="block">Selected track block</param>
        public void SetSelectedTrackBlock(TrackBlock block)
        {
            m_selectedBlock = block;

            if (block != null)
            {
                chkBrokenRail.Visible = chkCircuitFail.Visible = chkPowerFail.Visible = true;

                if (block.Status != null)
                {
                    //Set the failure status
                    chkBrokenRail.Checked = block.Status.BrokenRail;
                    chkCircuitFail.Checked = block.Status.CircuitFail;
                    chkPowerFail.Checked = block.Status.PowerFail;
                }
                else
                {
                    //This shouldn't happen. Uncheck the boxes
                    chkBrokenRail.Checked = chkCircuitFail.Checked = chkPowerFail.Checked = false;
                }
            }
            else
            {
                //Hide the check boxes
                chkBrokenRail.Visible = chkCircuitFail.Visible = chkPowerFail.Visible = false;
                chkBrokenRail.Checked = chkCircuitFail.Checked = chkPowerFail.Checked = false;
            }
        }
        // METHOD: TrackBlockGraphic
        //--------------------------------------------------------------------------------------
        /// <summary>
        /// Primary constructor for the track block graphic class
        /// </summary>
        /// <param name="block">Track block object this graphic represents</param>
        /// <param name="scale">Scaling constant for the screen</param>
        //--------------------------------------------------------------------------------------
        public TrackBlockGraphic(TrackBlock block, double scale)
        {
            this.SuspendLayout();

            InitializeComponent();

            //Need this crap to make it transparent
            this.DoubleBuffered = true;
            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            SetStyle(ControlStyles.UserPaint, true);

            RedColor        = Color.Red;
            YellowColor     = Color.Yellow;
            GreenColor      = Color.Green;
            SuperGreenColor = Color.Green;

            LineThickness = 5;
            ArrowLength   = 5;

            Block = block;

            m_currentColor = GetDrawColor();

            SetScale(scale);
            CalculateArrowPoints();
            this.BackColor = Color.Transparent;

            this.ResumeLayout();
        }
        /// <summary>
        /// Updates the owners of the track blocks notifiying them that a train moved to a new position
        /// </summary>
        /// <param name="previous">Previous block the train was on</param>
        /// <param name="current">Current block the train is now on</param>
        /// <returns></returns>
        public bool UpdateTrackControllers(TrackBlock previous, TrackBlock current)
        {
            //Initialize the track controllers
            if (m_controllerList != null)
            {
                foreach (ITrackController controller in m_controllerList)
                {
                    controller.Update();
                }
            }
            return(true);

            /*
             * bool result = false;
             * if (previous != null && current != null)
             * {
             *  ITrackController previousController = GetTrackController(previous);
             *  ITrackController newController = GetTrackController(current);
             *
             *  previousController.Update();
             *
             *  if (newController != null)
             *  {
             *      if (newController != previousController)
             *      {
             *          newController.Update();
             *      }
             *
             *      result = true;
             *  }
             * }
             *
             * return result;*/
        }
            private void UpdateAuthoritySignal(TrackBlock block, int authority)
            {
                if (block == null)
                {
                    throw new ArgumentNullException();
                }
                if (authority < -1)
                {
                    throw new ArgumentOutOfRangeException();
                }

                AddUpdatedStatus(block);

                block.Authority.Authority = authority;

                if (authority > AUTH_THRESH_SUPERGREEN)
                {
                    block.Status.SignalState = TrackSignalState.SuperGreen;
                }
                else if (authority > AUTH_THRESH_GREEN)
                {
                    block.Status.SignalState = TrackSignalState.Green;
                }
                else if (authority > AUTH_THRESH_YELLOW)
                {
                    block.Status.SignalState = TrackSignalState.Yellow;
                }
                else
                {
                    block.Status.SignalState = TrackSignalState.Red;
                }
            }
            private bool IsTrainApproaching(TrackBlock curr, TrackBlock dest)
            {
                if (dest == null)
                {
                    throw new ArgumentNullException();
                }

                List <TrackBlock> blocks = new List <TrackBlock>(m_trackBlocks.Values);

                while (blocks.Count > 0)
                {
                    TrackBlock b = blocks.ElementAt <TrackBlock>(0);
                    blocks.Remove(b);
                    if (b == curr)
                    {
                        continue;
                    }
                    if (b.Status.TrainPresent)
                    {
                        for (TrackBlock t = b.GetNextBlock(b.Status.TrainDirection);
                             t != null && blocks.Contains <TrackBlock>(t) &&
                             t.Status.IsOpen && !t.Status.TrainPresent;
                             t = (t.NextBlock == t) ? t.PreviousBlock : t.NextBlock)
                        {
                            if (t == dest)
                            {
                                return(true);
                            }
                            blocks.Remove(t);
                        }
                    }
                }
                return(false);
            }
        public void CloseTrackTest()
        {
            TrackController target  = new TrackController(); // TODO: Initialize to an appropriate value
            string          trackId = string.Empty;          // TODO: Initialize to an appropriate value
            bool            actual;

            actual = target.CloseTrack(trackId);
            Assert.IsFalse(actual);

            // can't close a track that isn't owned
            trackId = "akljkjcbao";
            actual  = target.CloseTrack(trackId);
            Assert.IsFalse(actual);

            // assert true if controller owns track and is able to close it
            TrackBlock block = new TrackBlock();

            block.Name = trackId = "TestName";
            target.AddTrackBlock(block);
            actual = target.CloseTrack(trackId);
            Assert.IsTrue(actual);

            // assert false if track is already closed
            actual = target.CloseTrack(trackId);
            Assert.IsFalse(actual);

            // shouldn't be able to close a track with a train on it
            block.Status.IsOpen       = true;
            block.Status.TrainPresent = true;
            actual = target.CloseTrack(trackId);
            Assert.IsFalse(actual);
        }
 private void AddUpdatedStatus(TrackBlock b)
 {
     if (!m_updatedBlocks.ContainsKey(b.Name))
     {
         m_updatedBlocks.Add(b.Name, b);
     }
 }
        /// <summary>
        /// Calculates the position of the graphic on the display panel
        /// </summary>
        /// <param name="block">Track block to display</param>
        /// <param name="arrowLength">Length of arrow graphics for position adjustment</param>
        /// <returns>Point of the graphic on the display panel</returns>
        private Point CalculateBlockPosition(TrackBlock block, Point layoutPosition, int arrowLength)
        {
            if (block != null)
            {
                switch (block.Orientation)
                {
                case TrackOrientation.EastWest:
                    return(new Point(System.Convert.ToInt32((block.StartPoint.X - layoutPosition.X) * m_scale),
                                     System.Convert.ToInt32((block.StartPoint.Y - layoutPosition.Y) * m_scale - arrowLength)));

                case TrackOrientation.NorthWestSouthEast:
                    return(new Point(System.Convert.ToInt32((block.StartPoint.X - layoutPosition.X) * m_scale),
                                     System.Convert.ToInt32((block.StartPoint.Y - layoutPosition.Y) * m_scale)));

                case TrackOrientation.SouthWestNorthEast:
                    return(new Point(System.Convert.ToInt32((block.StartPoint.X - layoutPosition.X) * m_scale),
                                     System.Convert.ToInt32((block.EndPoint.Y - layoutPosition.Y) * m_scale)));

                case TrackOrientation.NorthSouth:
                    return(new Point(System.Convert.ToInt32((block.StartPoint.X - layoutPosition.X) * m_scale - arrowLength),
                                     System.Convert.ToInt32((block.EndPoint.Y - layoutPosition.Y) * m_scale)));

                default:
                    return(new Point());
                }
            }

            return(new Point());
        }
Exemple #13
0
        // METHOD: SystemController
        //--------------------------------------------------------------------------------------
        /// <summary>
        /// Manage the starting, stopping, coordination and scheduling of all system processes
        /// </summary>
        /// <param name="samplePeriod">Sample period</param>
        //--------------------------------------------------------------------------------------
        private void SystemController(double samplePeriod)
        {
            // If this is the first time SystemController has been called,
            // the train is at the yard and needs to leave
            if (m_samplePeriod == 0.0)
            {
                LeaveStation();
            }

            // Keep track of the time that has passed since leaving the last station
            m_timePassed += samplePeriod;

            // Set the sample period
            m_samplePeriod = samplePeriod;

            // Set the current track block
            m_currentBlock = m_currentState.CurrentBlock;

            // Determine the m_setPoint
            DetermineSetPoint();

            // Check for faults
            FaultMonitor();

            // Generate and issue a power command
            m_lastCommand = VelocityController();

            // Control lights
            LightController();

            // Control announcements and doors
            StationController();
        }
        // METHOD: TrackBlockGraphic
        //--------------------------------------------------------------------------------------
        /// <summary>
        /// Primary constructor for the track block graphic class
        /// </summary>
        /// <param name="block">Track block object this graphic represents</param>
        /// <param name="scale">Scaling constant for the screen</param>
        //--------------------------------------------------------------------------------------
        public TrackBlockGraphic(TrackBlock block, double scale)
        {
            this.SuspendLayout();

            InitializeComponent();

            //Need this crap to make it transparent
            this.DoubleBuffered = true;
            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            SetStyle(ControlStyles.UserPaint, true);

            RedColor = Color.Red;
            YellowColor = Color.Yellow;
            GreenColor = Color.Green;
            SuperGreenColor = Color.Green;
            DotColor = Color.Orange;

            LineThickness = 5;
            ArrowLength = 10;

            Block = block;

            m_currentColor = GetDrawColor();

            SetScale(scale);
            CalculateArrowPoints();
            this.BackColor = Color.Transparent;

            this.ResumeLayout();
        }
Exemple #15
0
        public void SetFrictionTest()
        {
            string     trainID = "FrictionTestTrain";
            TrackBlock block   = new TrackBlock("block", TrackOrientation.EastWest, new Point(35, 0), 50.0, 0, 0,
                                                false, false, 40, TrackAllowedDirection.Both, false, null, null, "block", "block");

            block.NextBlock = block;
            Direction direction = Direction.East;
            Train     target    = new Train(trainID, block, direction);

            target.SetPower(10000, 5);
            target.SetEngineFailure(true);
            double previousSpeed = target.GetSpeed();

            target.Update(1);
            double newSpeed       = target.GetSpeed();
            double previousChange = previousSpeed - newSpeed;

            previousSpeed = newSpeed;
            target.SetFriction(0.5);
            target.Update(1);
            newSpeed = target.GetSpeed();
            double newChange = previousSpeed - newSpeed;

            Assert.IsTrue(newChange > previousChange);
        }
Exemple #16
0
        /// <summary>
        /// Sets the selected track block, or clears it if null
        /// </summary>
        /// <param name="block">Selected track block</param>
        public void SetSelectedTrackBlock(TrackBlock block)
        {
            m_selectedBlock = block;

            if (block != null)
            {
                chkBrokenRail.Visible = chkCircuitFail.Visible = chkPowerFail.Visible = true;

                if (block.Status != null)
                {
                    //Set the failure status
                    chkBrokenRail.Checked  = block.Status.BrokenRail;
                    chkCircuitFail.Checked = block.Status.CircuitFail;
                    chkPowerFail.Checked   = block.Status.PowerFail;
                }
                else
                {
                    //This shouldn't happen. Uncheck the boxes
                    chkBrokenRail.Checked = chkCircuitFail.Checked = chkPowerFail.Checked = false;
                }
            }
            else
            {
                //Hide the check boxes
                chkBrokenRail.Visible = chkCircuitFail.Visible = chkPowerFail.Visible = false;
                chkBrokenRail.Checked = chkCircuitFail.Checked = chkPowerFail.Checked = false;
            }
        }
Exemple #17
0
        public void BuildLayoutTest()
        {
            List <TrackBlock> trackRegion = new List <TrackBlock>();
            TrackBlock        redBlock1   = new TrackBlock("red1", TrackOrientation.EastWest, new Point(0, 0), 50.0, 0.25, 0.5,
                                                           false, false, 40, TrackAllowedDirection.Both, false, "redController1", null, null, "red2");

            trackRegion.Add(redBlock1);
            TrackBlock redBlock2 = new TrackBlock("red2", TrackOrientation.SouthWestNorthEast, redBlock1.EndPoint, 50.0, 0.75, 1,
                                                  false, false, 40, TrackAllowedDirection.Both, false, "redController1", "redcontroller2", "red1", "red3");

            trackRegion.Add(redBlock2);
            TrackBlock redBlock3 = new TrackBlock("red3", TrackOrientation.NorthSouth, redBlock2.EndPoint, 50.0, 1.50, 1.5,
                                                  false, false, 40, TrackAllowedDirection.Both, false, "redController2", "redcontroller1", "red2", "red4");

            trackRegion.Add(redBlock3);
            TrackBlock redBlock4 = new TrackBlock("red4", TrackOrientation.SouthWestNorthEast, redBlock3.EndPoint, 50.0, 2.5, 2,
                                                  false, false, 40, TrackAllowedDirection.Both, false, "redController2", null, "red3", "red5");

            trackRegion.Add(redBlock4);
            m_ctcAccessor.BuildLayout(trackRegion, new List <TrackSwitch>());

            Assert.IsNotNull(m_ctcAccessor.m_blockTable);
            Assert.IsTrue(m_ctcAccessor.m_trackTable.ContainsKey(redBlock1));
            Assert.IsTrue(m_ctcAccessor.m_trackTable.ContainsKey(redBlock2));
            Assert.IsTrue(m_ctcAccessor.m_trackTable.ContainsKey(redBlock3));
            Assert.IsTrue(m_ctcAccessor.m_trackTable.ContainsKey(redBlock4));
            Assert.IsNotNull(m_ctcAccessor.m_trackTable[redBlock1]);
            Assert.IsNotNull(m_ctcAccessor.m_trackTable[redBlock2]);
            Assert.IsNotNull(m_ctcAccessor.m_trackTable[redBlock3]);
            Assert.IsNotNull(m_ctcAccessor.m_trackTable[redBlock4]);
        }
Exemple #18
0
 /// <summary>
 /// A train entered a new track block. Need to push an update to the track controllers
 /// </summary>
 /// <param name="previous">Previous track block</param>
 /// <param name="next">Next track block</param>
 private void OnTrainEnteredNewBlock(TrackBlock previous, TrackBlock next)
 {
     if (!m_ctcController.UpdateTrackControllers(previous, next))
     {
         m_log.LogError("Failed to update track controllers");
     }
 }
        /// <summary>
        /// Attempts to set the speed limit for the specified block
        /// </summary>
        /// <param name="block">Track block</param>
        /// <param name="value">Speed limit value</param>
        /// <returns>Bool success</returns>
        public bool SetSpeedLimit(TrackBlock block, string value)
        {
            bool result = false;
            int  limit;

            if (Int32.TryParse(value, out limit)) //Parse the string into an integer
            {
                //Let the Wayside controller determine if the speed limit is valid

                //Send speed limit to wayside controller
                ITrackController controller = GetTrackController(block);
                if (controller != null)
                {
                    try
                    {
                        result = controller.SuggestAuthority(block.Name, new BlockAuthority(limit, block.Authority.Authority));
                    }
                    catch (Exception e)
                    {
                        m_log.LogError("Error in setting speed limit", e);
                    }
                }
            }

            return(result);
        }
Exemple #20
0
        public void GetStateTest()
        {
            string     trainID = "StateTestTrain";
            TrackBlock block   = new TrackBlock("block", TrackOrientation.EastWest, new Point(35, 0), 50.0, 0, 0,
                                                false, false, 40, TrackAllowedDirection.Both, false, null, null, "block", "block");

            block.NextBlock = block;
            Direction  direction = Direction.East;
            Train      target    = new Train(trainID, block, direction);
            TrainState state     = target.GetState();

            Assert.AreEqual(null, state.Announcement);
            Assert.AreEqual(0, state.BlockProgress);
            Assert.AreEqual(false, state.BrakeFailure);
            Assert.AreEqual(1, state.Cars);
            Assert.AreEqual(0, state.Crew);
            Assert.AreEqual(block, state.CurrentBlock);
            Assert.AreEqual(direction, state.Direction);
            Assert.AreEqual(TrainState.Door.Open, state.Doors);
            Assert.AreEqual(false, state.EngineFailure);
            Assert.AreEqual(TrainState.Light.Off, state.Lights);
            Assert.AreEqual(40900, state.Mass);
            Assert.AreEqual(0, state.Passengers);
            Assert.AreEqual(false, state.SignalPickupFailure);
            Assert.AreEqual(0, state.Speed);
            Assert.AreEqual(0, state.Temperature);
            Assert.AreEqual(trainID, state.TrainID);
            Assert.AreEqual(35, state.X);
            Assert.AreEqual(0, state.Y);
        }
Exemple #21
0
        public void OpenTrackBlockTest()
        {
            TrackBlock block    = m_ctcAccessor.GetBlockList()[0];
            bool       expected = false; //Block is already open so it returns false
            bool       actual   = m_ctcAccessor.OpenTrackBlock(block);

            Assert.AreEqual(expected, actual);
        }
        public void ShowTrackBlockCommandsTest1()
        {
            CommandPanel target = new CommandPanel(); // TODO: Initialize to an appropriate value
            TrackBlock   block  = null;               // TODO: Initialize to an appropriate value

            target.ShowTrackBlockCommands(block);
            Assert.Inconclusive("A method that does not return a value cannot be verified.");
        }
        public void TrackBlockGraphicConstructorTest()
        {
            TrackBlock        block  = null; // TODO: Initialize to an appropriate value
            double            scale  = 0F;   // TODO: Initialize to an appropriate value
            TrackBlockGraphic target = new TrackBlockGraphic(block, scale);

            Assert.Inconclusive("TODO: Implement code to verify target");
        }
Exemple #24
0
        public void CloseTrackBlockTest_badBlock()
        {
            TrackBlock block    = new TrackBlock(); // TODO: Initialize to an appropriate value
            bool       expected = false;            // TODO: Initialize to an appropriate value
            bool       actual   = m_ctcAccessor.CloseTrackBlock(block);

            Assert.AreEqual(expected, actual);
        }
Exemple #25
0
        public void OpenTrackBlockTest_badBlock()
        {
            TrackBlock block    = new TrackBlock();
            bool       expected = false;
            bool       actual   = m_ctcAccessor.OpenTrackBlock(block);

            Assert.AreEqual(expected, actual);
        }
Exemple #26
0
        public void CloseTrackBlockTest_null()
        {
            TrackBlock block    = null;
            bool       expected = false;
            bool       actual   = m_ctcAccessor.CloseTrackBlock(block);

            Assert.AreEqual(expected, actual);
        }
Exemple #27
0
        public void CloseTrackBlockTest()
        {
            TrackBlock block    = m_ctcAccessor.GetBlockList()[2];
            bool       expected = true;
            bool       actual   = m_ctcAccessor.CloseTrackBlock(block);

            Assert.AreEqual(expected, actual);
        }
        public void SetTrainYardInfoTest1()
        {
            InfoPanel  target = new InfoPanel(); // TODO: Initialize to an appropriate value
            TrackBlock b      = null;            // TODO: Initialize to an appropriate value

            target.SetTrainYardInfo(b);
            Assert.Inconclusive("A method that does not return a value cannot be verified.");
        }
Exemple #29
0
        public void SetSelectedTrackBlockTest1()
        {
            SimulatorWindow target = new SimulatorWindow(); // TODO: Initialize to an appropriate value
            TrackBlock      block  = null;                  // TODO: Initialize to an appropriate value

            target.SetSelectedTrackBlock(block);
            Assert.Inconclusive("A method that does not return a value cannot be verified.");
        }
        public void UpdateAuthoritySignalTest1()
        {
            TrackController_Accessor target = new TrackController_Accessor(); // TODO: Initialize to an appropriate value
            TrackBlock block     = null;                                      // TODO: Initialize to an appropriate value
            int        authority = 0;                                         // TODO: Initialize to an appropriate value

            target.UpdateAuthoritySignal(block, authority);
            Assert.Inconclusive("A method that does not return a value cannot be verified.");
        }
Exemple #31
0
 // METHOD: TrainController
 //--------------------------------------------------------------------------------------
 /// <summary>
 /// Primary constructor
 /// </summary>
 ///
 /// <param name="myTrain">The train associated with this controller</param>
 //--------------------------------------------------------------------------------------
 public TrainController(ITrain myTrain)
 {
     this.m_myTrain            = myTrain;
     this.m_currentState       = m_myTrain.GetState();
     this.m_trainID            = m_currentState.TrainID;
     this.m_currentBlock       = m_currentState.CurrentBlock;
     this.m_passengerGenerator = new Random((int)DateTime.Now.Ticks);
     this.ManualSpeed          = -1;
 }
 // METHOD: TrainController
 //--------------------------------------------------------------------------------------
 /// <summary>
 /// Primary constructor
 /// </summary>
 /// 
 /// <param name="myTrain">The train associated with this controller</param>
 //--------------------------------------------------------------------------------------
 public TrainController(ITrain myTrain)
 {
     this.m_myTrain = myTrain;
     this.m_currentState = m_myTrain.GetState();
     this.m_trainID = m_currentState.TrainID;
     this.m_currentBlock = m_currentState.CurrentBlock;
     this.m_passengerGenerator = new Random((int)DateTime.Now.Ticks);
     this.ManualSpeed = -1;
 }
        public void BlinkTest()
        {
            TrackBlock        block  = null;                                // TODO: Initialize to an appropriate value
            double            scale  = 0F;                                  // TODO: Initialize to an appropriate value
            TrackBlockGraphic target = new TrackBlockGraphic(block, scale); // TODO: Initialize to an appropriate value

            target.Blink();
            Assert.Inconclusive("A method that does not return a value cannot be verified.");
        }
        public void AddTrackBlockTest()
        {
            TrackController target = new TrackController(); // TODO: Initialize to an appropriate value
            TrackBlock block = null; // TODO: Initialize to an appropriate value
            bool actual;
            actual = target.AddTrackBlock(block);
            Assert.IsFalse(actual);

            block = new TrackBlock();
            actual = target.AddTrackBlock(block);
            Assert.IsTrue(actual);
        }
Exemple #35
0
        // METHOD: TrackSwitch
        //--------------------------------------------------------------------------------------
        /// <summary>
        /// Primary constructor with initial state
        /// </summary>
        /// 
        /// <param name="name">Track switch name</param>
        /// <param name="controllerID">ID of the TrackController assigned to the switch</param>
        /// <param name="trunk">the trunk of the switch</param>
        /// <param name="branch1">the first branch of the switch</param>
        /// <param name="branch2">the second branch of the switch</param>
        /// <remarks>
        /// The TrackBlock that you pass as trunk should be connected to Branch
        /// The TrackBlock that you pass as branch1 should be connected to Trunk1
        /// The TrackBlock that you pass as branch2 should be connected to Trunk2
        /// </remarks>
        //--------------------------------------------------------------------------------------
        public TrackSwitch(string name, string controllerID, TrackBlock trunk, TrackBlock branchClosed, TrackBlock branchOpen)
        {
            Name = name;
            ControllerId = controllerID;

            TrunkId = trunk.Name;
            BranchClosedId = branchClosed.Name;
            BranchOpenId = branchOpen.Name;

            // initial state
            BranchClosed = branchClosed;
            BranchOpen = branchOpen;
            Trunk = trunk;

            m_state = TrackSwitchState.Closed;
        }
 public void TrackBlockConstructorTest()
 {
     TrackOrientation orientation = TrackOrientation.EastWest;
     double length = 3.5;
     bool tunnel = false;
     bool railroadCrossing = false;
     Transponder transponder = new Transponder("Station1", 2);
     Point startPoint = new Point(0,0);
     TrackBlock target = new TrackBlock(orientation, length, tunnel, railroadCrossing, transponder, startPoint);
     Assert.AreEqual(orientation, target.Orientation);
     Assert.AreEqual(length, target.LengthMeters);
     Assert.IsFalse(target.HasTunnel);
     Assert.IsNotNull(target.Transponder);
     Assert.AreEqual("Station1", target.Transponder.StationName);
     Assert.AreEqual(2, target.Transponder.DistanceToStation);
     Assert.AreEqual(startPoint.X, target.StartPoint.X);
     Assert.AreEqual(startPoint.Y, startPoint.Y);
 }
            // METHOD: TrackController
            // - TrackController Constructor
            public bool AddTrackBlock(TrackBlock block, List<TrackBlock> adjBlocks)
            {
                // Null Arguments
                if (block == null)
                    return false;
                if (adjBlocks == null)
                    return false;

                // TrackBlock Duplicated
                if (m_trackBlocks.ContainsKey(block.Name))
                    return false;

                m_trackBlocks.Add(block.Name, block);

                // TODO: Add code for adjecent blocks

                return true;
            }
Exemple #38
0
        /// <summary>
        /// Sets the text information for a track block
        /// </summary>
        /// <param name="block">Track block</param>
        public void SetTrackBlockInfo(TrackBlock block)
        {
            if (block == null) return;

            Dictionary<string, string> info = new Dictionary<string, string>();
            if (block.Authority != null)
            {
                info.Add("Authority:", block.Authority.Authority.ToString());
            }

            if (block.Authority != null)
            {
                info.Add("Speed Limit:", block.Authority.SpeedLimitKPH.ToString() + " " + KPH);
            }

            if (block.Status.TrainPresent)
            {
                info.Add("Train present:", "yes");
            }
            else
            {
                info.Add("Train present:", "no");
            }

            info.Add("Signal:", block.Status.SignalState.ToString());

            info.Add("Start Elevation:", block.StartElevationMeters.ToString() + " " + METERS);

            info.Add("End Elevation", block.EndElevationMeters.ToString() + " " + METERS);

            info.Add("Grade", block.Grade.ToString() + "%");

            info.Add("Length:", block.LengthMeters.ToString() + " " + METERS);

            if (block.HasTunnel)
            {
                info.Add("Has Tunnel:", "yes");
            }
            else
            {
                info.Add("Has Tunnel:", "no");
            }

            if (block.RailroadCrossing)
            {
                info.Add("Has RR Crossing:", "yes");
            }
            else
            {
                info.Add("Has RR Crossing:", "no");
            }

            if (block.Transponder != null) //Could use block.HasTransponder property, but check for null to be on the safe side...
            {
                if (block.Transponder.DistanceToStation != 0)
                {
                    info.Add("Transponder:", block.Transponder.StationName + "in " + block.Transponder.DistanceToStation.ToString() + " block(s)");
                }
                else
                {
                    info.Add("Transponder:", "At " + block.Transponder.StationName);
                }
            }
            else
            {
                info.Add("Transponder:", "none");
            }

            KeyValuePair<string, string> failure = GetBlockFailureStateString(block);
            info.Add(failure.Key, failure.Value);

            #if DEBUG
            info.Add("Start Point", block.StartPoint.X + ", " + block.StartPoint.Y);
            info.Add("End Point", block.EndPoint.X + ", " + block.EndPoint.Y);
            #endif
            SetInfo(block.Name, info);
        }
Exemple #39
0
        /// <summary>
        /// Creates a new train on the track
        /// 
        /// </summary>
        /// <param name="initialBlock">Starting block of the train</param>
        /// <param name="name">Name of the train</param>
        public void SpawnNewTrain(TrackBlock initialBlock, string name)
        {
            if (initialBlock != null)
            {
                if (initialBlock.HasTransponder)
                {
                    string start = initialBlock.Transponder.StationName;
                    if (start.Contains(Constants.TRAINYARD)) //Can only spawn trains from stations
                    {
                        if (m_startingDirections.ContainsKey(start))
                        {
                            m_log.LogInfoFormat("Spawning new train \"{0}\" at start {1}", name, start);
                            //Create the new train and train controller
                            ITrain train = new TrainLib.Train(name, initialBlock, m_startingDirections[start]);
                            train.TrainEnteredNewBlock += OnTrainEnteredNewBlock;
                            TrainController trainController = new TrainController(train);
                            m_trainControllerList.Add(trainController);
                            m_trainControllerTable[train] = trainController;
                            CTCController.GetCTCController().AddTrainToList(train);

                            //Set the train schedule
                            if (start == Constants.REDYARD)
                            {
                                m_log.LogInfoFormat("Setting schedule of {0} to red line", name);
                                trainController.Schedule = CTCController.GetCTCController().GetRedlineSchedule();
                            }
                            else if (start == Constants.GREENYARDOUT)
                            {
                                m_log.LogInfoFormat("Setting schedule of {0} to green line", name);
                                trainController.Schedule = CTCController.GetCTCController().GetGreenlineSchedule();
                            }
                        }
                    }
                }
            }
        }
Exemple #40
0
        /// <summary>
        /// Sets the text information for a train
        /// </summary>
        /// <param name="train">Train</param>
        public void SetTrainInfo(ITrain train)
        {
            if (train == null) return;

            TrainState state = train.GetState();

            if (state == null) return;

            m_displayedBlock = null;
            m_displayedTrain = train;

            Dictionary<string, string> info = new Dictionary<string, string>();

            info.Add("Number of cars:", state.Cars.ToString());
            info.Add("Crew members:", state.Crew.ToString());
            info.Add("Direction:", state.Direction.ToString());
            info.Add("Door Status:", state.Doors.ToString());
            info.Add("Light Status:", state.Lights.ToString());
            info.Add("Mass:", state.Mass.ToString());
            info.Add("Passengers:", state.Passengers.ToString());
            info.Add("Speed:", string.Format("{0:0.00} {1}", state.Speed.ToString(), KPH));
            info.Add("Temperature:", state.Temperature.ToString());
            info.Add("Position:", string.Format("{0:0.00} , {1:0.00}", state.X.ToString(), state.Y.ToString()));

            if (state.TrainID != null)
            {
                SetInfo(state.TrainID.ToString(), info);
            }
            else
            {
                SetInfo(UNKNOWN_TEXT, info);
            }
        }
 public void OnTrackBlockClickedTest()
 {
     MainScreen_Accessor target = new MainScreen_Accessor();
     TrackBlock b = new TrackBlock();
     target.OnTrackBlockClicked(b);
     Assert.AreEqual(b, target.m_selectedTrackBlock);
     Assert.IsNull(target.m_selectedTrain);
     Assert.IsNotNull(target.m_simulatorWindow);
     Assert.AreEqual(0, target.m_openPopups.Count);
 }
Exemple #42
0
 /// <summary>
 /// Simulates a track block power failure
 /// </summary>
 /// <param name="block">Track block to simulate on</param>
 /// <param name="failure">True to invoke failure or false to clear it</param>
 public void SimulatePowerFailure(TrackBlock block, bool failure)
 {
     if (block != null)
     {
         if (block.Status != null)
         {
             m_log.LogInfoFormat("Setting power fail of block {0} to {1}", block.Name, failure);
             block.Status.PowerFail = failure;
             m_ctcController.UpdateTrackController(block);
         }
     }
 }
Exemple #43
0
        /// <summary>
        /// Event handler for the track block clicked event
        /// </summary>
        /// <param name="b">Track block that was clicked</param>
        private void OnTrackBlockClicked(TrackBlock b)
        {
            m_log.LogInfo("Track block was clicked");
            m_selectedTrain = null;
            m_selectedTrackBlock = b;

            if (m_trainGUI != null)
            {
                m_trainGUI.Close();
                m_trainGUI = null;
            }

            if (m_simulatorWindow == null || m_simulatorWindow.IsDisposed || m_simulatorWindow.Disposing)
            {
                m_simulatorWindow = new SimulatorWindow(); //User may have closed the simulator
                m_simulatorWindow.Show();
            }

            m_simulatorWindow.SetSelectedTrackBlock(m_selectedTrackBlock);

            if (b != null)
            {
                bool trainYard = false;
                if (b.HasTransponder)
                {
                    if (!string.IsNullOrEmpty(b.Transponder.StationName))
                    {
                        if (b.Transponder.StationName.Contains(Constants.TRAINYARD) && b.Transponder.DistanceToStation == 0)
                        {
                            //This is a train yard, handle it specially
                            infoPanel.SetTrainYardInfo(b);
                            commandPanel.ShowTrainYardCommands();
                            trainYard = true;
                        }
                    }
                }

                if (!trainYard)
                {
                    //Normal track block
                    infoPanel.SetTrackBlockInfo(b);
                    commandPanel.ShowTrackBlockCommands(b);
                }
            }

            CloseOpenPopups();
        }
        public void IsTrainApproachingTest()
        {
            TrackController_Accessor target = new TrackController_Accessor(); // TODO: Initialize to an appropriate value
            TrackBlock dest = new TrackBlock("dest", TrackOrientation.EastWest, new Point(), 0.0, 0.0, 0.0, false, false, 0, TrackAllowedDirection.Both, true, "controller", "", "", "");
            TrackBlock b1 = new TrackBlock("track1", TrackOrientation.EastWest, new Point(), 0.0, 0.0, 0.0, false, false, 0, TrackAllowedDirection.Both, false, "controller", "", "", "");
            TrackBlock b2 = new TrackBlock("track2", TrackOrientation.EastWest, new Point(), 0.0, 0.0, 0.0, false, false, 0, TrackAllowedDirection.Both, false, "controller", "", "", "");
            TrackBlock b3 = new TrackBlock("track3", TrackOrientation.EastWest, new Point(), 0.0, 0.0, 0.0, false, false, 0, TrackAllowedDirection.Both, false, "controller", "", "", "");

            b1.Orientation = TrackOrientation.EastWest;
            b1.Status.TrainDirection = Direction.East;
            b1.Status.TrainPresent = true;
            b1.NextBlock = b2;
            b2.Orientation = TrackOrientation.EastWest;
            b2.Status.TrainDirection = Direction.East;
            b2.NextBlock = b3;
            b3.Orientation = TrackOrientation.EastWest;
            b3.Status.TrainDirection = Direction.East;
            b3.NextBlock = dest;
            target.AddTrackBlock(b1);
            target.AddTrackBlock(b2);
            target.AddTrackBlock(b3);
            target.AddTrackBlock(dest);
            bool actual;
            actual = target.IsTrainApproaching(dest);
            Assert.IsTrue(actual);

            b1.Orientation = TrackOrientation.EastWest;
            b1.Status.TrainDirection = Direction.West;
            b1.Status.TrainPresent = true;
            b1.PreviousBlock = b2;
            b2.Orientation = TrackOrientation.EastWest;
            b2.Status.TrainDirection = Direction.West;
            b2.PreviousBlock = b3;
            b3.Orientation = TrackOrientation.EastWest;
            b3.Status.TrainDirection = Direction.West;
            b3.PreviousBlock = dest;
            target.AddTrackBlock(b1);
            target.AddTrackBlock(b2);
            target.AddTrackBlock(b3);
            target.AddTrackBlock(dest);
            actual = target.IsTrainApproaching(dest);
            Assert.IsTrue(actual);

            b1.Orientation = TrackOrientation.EastWest;
            b1.Status.TrainDirection = Direction.West;
            b1.PreviousBlock = b2;
            b2.Orientation = TrackOrientation.EastWest;
            b2.Status.TrainDirection = Direction.West;
            b2.PreviousBlock = b3;
            b3.Orientation = TrackOrientation.EastWest;
            b3.Status.TrainDirection = Direction.West;
            b3.PreviousBlock = dest;
            target.AddTrackBlock(b1);
            target.AddTrackBlock(b2);
            target.AddTrackBlock(b3);
            target.AddTrackBlock(dest);
            actual = target.IsTrainApproaching(dest);
            Assert.IsFalse(actual);

            b1.Orientation = TrackOrientation.NorthSouth;
            b1.Status.TrainDirection = Direction.South;
            b1.PreviousBlock = b2;
            b2.Orientation = TrackOrientation.NorthSouth;
            b2.Status.TrainDirection = Direction.South;
            b2.PreviousBlock = b3;
            b3.Orientation = TrackOrientation.NorthSouth;
            b3.Status.TrainDirection = Direction.South;
            b3.PreviousBlock = dest;
            target.AddTrackBlock(b1);
            target.AddTrackBlock(b2);
            target.AddTrackBlock(b3);
            target.AddTrackBlock(dest);
            actual = target.IsTrainApproaching(dest);
            Assert.IsFalse(actual);
        }
        // METHOD: CreateTrain_Click
        //--------------------------------------------------------------------------------------
        /// <summary>
        /// Start the GUI, and create a train and train controller if in a demo
        /// </summary>
        /// 
        /// <param name="sender">Sender</param>
        /// <param name="e">Event Arguments</param>
        //--------------------------------------------------------------------------------------
        private void CreateTrain_Click(object sender, EventArgs e)
        {
            if (m_isDemo)
            {
                m_startingBlock = new TrackBlock("Block1", TrackOrientation.EastWest, new Point(0, 0), 1650, 0, 0, false, false, 70, TrackAllowedDirection.Both, false, "controller1", "controller2", "Block0", "Block2");
                m_startingBlock.NextBlock = new TrackBlock("Block2", TrackOrientation.EastWest, new Point(1650, 0), 50, 0, 0, true, false, 70, TrackAllowedDirection.Both, false, "controller1", "controller2", "Block1", "Block3");
                m_startingBlock.Authority = new BlockAuthority(70, 3);
                m_startingBlock.NextBlock.Authority = new BlockAuthority(70, 2);
                m_startingBlock.NextBlock.NextBlock = new TrackBlock("Block3", TrackOrientation.EastWest, new Point(1700, 0), 1000, 0, 0, true, false, 70, TrackAllowedDirection.Both, false, "controller1", "controller2", "Block2", "Block4");
                m_startingBlock.NextBlock.NextBlock.NextBlock = new TrackBlock("Block4", TrackOrientation.EastWest, new Point(2700, 0), 100, 0, 0, false, false, 70, TrackAllowedDirection.Both, false, "controller1", "controller2", "Block3", "Block5");
                m_startingBlock.NextBlock.NextBlock.NextBlock.NextBlock = new TrackBlock("Block5", TrackOrientation.EastWest, new Point(2800, 0), 100, 0, 0, false, false, 70, TrackAllowedDirection.Both, false, "controller1", "controller2", "Block4", "Block6");
                m_startingBlock.NextBlock.NextBlock.NextBlock.NextBlock.NextBlock = new TrackBlock("Block6", TrackOrientation.EastWest, new Point(2800, 0), 100, 0, 0, false, false, 70, TrackAllowedDirection.Both, false, "controller1", "controller2", "Block5", "Block7");
                m_startingBlock.NextBlock.NextBlock.Authority = new BlockAuthority(70, 1);

                m_startingBlock.NextBlock.NextBlock.NextBlock.Authority = new BlockAuthority(40, 0);
                m_startingBlock.NextBlock.NextBlock.NextBlock.NextBlock.Authority = new BlockAuthority(40, 0);
                m_startingBlock.NextBlock.NextBlock.NextBlock.NextBlock.NextBlock.Authority = new BlockAuthority(40, 0);

                m_startingBlock.Transponder = new Transponder("SHADYSIDE", 1);
                m_startingBlock.NextBlock.Transponder = new Transponder("SHADYSIDE", 0);

                m_myTrain = new TrainLib.Train("train1", m_startingBlock, Direction.East);
                m_myTrainState = m_myTrain.GetState();
                m_myTrainController = new TrainController(m_myTrain);
                m_myTrainController.Schedule = GetRedlineSchedule();

                Timer updateTimer = new Timer();
                updateTimer.Tick += new EventHandler(Update);
                updateTimer.Interval = 40;
                updateTimer.Enabled = true;
                updateTimer.Start();
            }

            m_myTimer = new Timer();
            m_myTimer.Tick += new EventHandler(UpdateDisplay);
            m_myTimer.Interval = 500;
            m_myTimer.Enabled = true;
            m_myTimer.Start();
        }
 public void SpawnNewTrainTest_nullTransponder()
 {
     Simulator_Accessor target = new Simulator_Accessor();
     TrackBlock block = new TrackBlock();
     block.Transponder = null;
     string name = "train";
     target.SpawnNewTrain(block, name);
     Assert.AreEqual(0, target.m_trainControllerList.Count);
 }
Exemple #47
0
        /// <summary>
        /// Event handler for the train clicked event
        /// </summary>
        /// <param name="train">Train that was clicked</param>
        private void OnTrainClicked(ITrain train)
        {
            m_log.LogInfo("Train was clicked");
            m_selectedTrackBlock = null;
            m_selectedTrain = train;
            infoPanel.SetTrainInfo(train);
            commandPanel.ShowTrainCommands();

            if (m_trainGUI != null)
            {
                m_trainGUI.Close();
            }

            TrainController trainController = Simulator.GetSimulator().GetTrainController(train);
            if (trainController != null)
            {
                m_trainGUI = new TrainOperator(train, trainController);
                m_trainGUI.Show();
            }

            CloseOpenPopups();
        }
Exemple #48
0
 /// <summary>
 /// A train entered a new track block. Need to push an update to the track controllers
 /// </summary>
 /// <param name="previous">Previous track block</param>
 /// <param name="next">Next track block</param>
 private void OnTrainEnteredNewBlock(TrackBlock previous, TrackBlock next)
 {
     if (!m_ctcController.UpdateTrackControllers(previous, next))
     {
         m_log.LogError("Failed to update track controllers");
     }
 }
        public void CloseTrackTest()
        {
            TrackController target = new TrackController(); // TODO: Initialize to an appropriate value
            string trackId = string.Empty; // TODO: Initialize to an appropriate value
            bool actual;
            actual = target.CloseTrack(trackId);
            Assert.IsFalse(actual);

            // can't close a track that isn't owned
            trackId = "akljkjcbao";
            actual = target.CloseTrack(trackId);
            Assert.IsFalse(actual);

            // assert true if controller owns track and is able to close it
            TrackBlock block = new TrackBlock();
            block.Name = trackId = "TestName";
            target.AddTrackBlock(block);
            actual = target.CloseTrack(trackId);
            Assert.IsTrue(actual);

            // assert false if track is already closed
            actual = target.CloseTrack(trackId);
            Assert.IsFalse(actual);

            // shouldn't be able to close a track with a train on it
            block.Status.IsOpen = true;
            block.Status.TrainPresent = true;
            actual = target.CloseTrack(trackId);
            Assert.IsFalse(actual);
        }
Exemple #50
0
        /// <summary>
        /// Creates a new train on the track
        /// 
        /// </summary>
        /// <param name="initialBlock">Starting block of the train</param>
        /// <param name="name">Name of the train</param>
        public void SpawnNewTrain(TrackBlock initialBlock, string name)
        {
            if (initialBlock != null)
            {
                if (initialBlock.HasTransponder)
                {
                    string start = initialBlock.Transponder.StationName;
                    if (m_startingDirections.ContainsKey(start))
                    {
                        m_log.LogInfoFormat("Spawning new train \"{0}\" at start {1}", name, start);
                        //Create the new train and train controller
                        ITrain train = new Train.Train(name, initialBlock, m_startingDirections[start]);
                        ITrainController trainController = new TrainController(train);
                        m_trainList.Add(trainController);

                        //Set the train schedule
                        if (start == Constants.REDYARD)
                        {
                            m_log.LogInfoFormat("Setting schedule of {0} to red line", name);
                            trainController.SetSchedule(CTCController.GetCTCController().GetRedlineSchedule());
                        }
                        else if (start == Constants.GREENYARDOUT)
                        {
                            m_log.LogInfoFormat("Setting schedule of {0} to green line", name);
                            trainController.SetSchedule(CTCController.GetCTCController().GetGreenlineSchedule());
                        }
                    }
                }
            }
        }
Exemple #51
0
 /// <summary>
 /// Displays info about the train yard
 /// </summary>
 /// <param name="b">Track block</param>
 public void SetTrainYardInfo(TrackBlock b)
 {
     //Just show the block name
     SetInfo(b.Name, null);
 }
Exemple #52
0
        /// <summary>
        /// Gets the failure state string for the given track block
        /// </summary>
        /// 
        /// <remarks>There are 8 different possible strings, so this chunk of code gets ugly</remarks>
        /// <param name="block">Track block</param>
        /// <returns>Failure state string</returns>
        private KeyValuePair<string, string> GetBlockFailureStateString(TrackBlock block)
        {
            KeyValuePair<string, string> pair;

            //Check all 8 possible states
            if (!block.Status.BrokenRail && !block.Status.CircuitFail && !block.Status.PowerFail)
            {
                pair = new KeyValuePair<string, string>("Failure State:", "none");
            }
            else if (!block.Status.BrokenRail && !block.Status.CircuitFail && block.Status.PowerFail)
            {
                pair = new KeyValuePair<string, string>("Failure State:", "Power Failure");
            }
            else if (!block.Status.BrokenRail && block.Status.CircuitFail && !block.Status.PowerFail)
            {
                pair = new KeyValuePair<string, string>("Failure State:", "Circuit Failure");
            }
            else if (!block.Status.BrokenRail && block.Status.CircuitFail && block.Status.PowerFail)
            {
                pair = new KeyValuePair<string, string>("Failure State:", "Circuit & Power Failure");
            }
            else if (block.Status.BrokenRail && !block.Status.CircuitFail && !block.Status.PowerFail)
            {
                pair = new KeyValuePair<string, string>("Failure State:", "Broken Rail");
            }
            else if (block.Status.BrokenRail && !block.Status.CircuitFail && block.Status.PowerFail)
            {
                pair = new KeyValuePair<string, string>("Failure State:", "Broken Rail & Power Failure");
            }
            else if (block.Status.BrokenRail && block.Status.CircuitFail && !block.Status.PowerFail)
            {
                pair = new KeyValuePair<string, string>("Failure State:", "Broken Rail & Circuit Failure");
            }
            else if (block.Status.BrokenRail && block.Status.CircuitFail && block.Status.PowerFail)
            {
                pair = new KeyValuePair<string, string>("Failure State:", "Broken Rail, Circuit, & Power Failure");
            }
            else
            {
                //Unreachable, but needed since pair is not nullable
                pair = new KeyValuePair<string, string>();
            }

            return pair;
        }
Exemple #53
0
 /// <summary>
 /// Displays info about the train yard
 /// </summary>
 /// <param name="b">Track block</param>
 public void SetTrainYardInfo(TrackBlock b)
 {
     //Just show the block name
     m_displayedTrain = null;
     m_displayedBlock = b;
     SetInfo(b.Name, null);
 }
Exemple #54
0
 /// <summary>
 /// Simulates a track block circuit failure
 /// </summary>
 /// <param name="block">Track block to simulate on</param>
 /// <param name="failure">True to invoke failure or false to clear it</param>
 public void SimulateCircuitFailure(TrackBlock block, bool failure)
 {
     if (block != null)
     {
         if (block.Status != null)
         {
             m_log.LogInfoFormat("Setting circuit fail of block {0} to {1}", block.Name, failure);
             block.Status.CircuitFail = failure;
         }
     }
 }
        // METHOD: SystemController
        //--------------------------------------------------------------------------------------
        /// <summary>
        /// Manage the starting, stopping, coordination and scheduling of all system processes
        /// </summary>
        /// <param name="samplePeriod">Sample period</param>
        //--------------------------------------------------------------------------------------
        private void SystemController(double samplePeriod)
        {
            // If this is the first time SystemController has been called,
            // the train is at the yard and needs to leave
            if (m_samplePeriod == 0.0)
            {
                LeaveStation();
            }

            // Keep track of the time that has passed since leaving the last station
            m_timePassed += samplePeriod;

            // Set the sample period
            m_samplePeriod = samplePeriod;

            // Set the current track block
            m_currentBlock = m_currentState.CurrentBlock;

            // Determine the m_setPoint
            DetermineSetPoint();

            // Check for faults
            FaultMonitor();

            // Generate and issue a power command
            VelocityController();

            // Control lights
            LightController();

            // Control announcements and doors
            StationController();
        }
        /// <summary>
        /// Gets the failure state string for the given track block
        /// </summary>
        /// 
        /// <remarks>There are 8 different possible strings, so this chunk of code gets ugly</remarks>
        /// <param name="block">Track block</param>
        /// <returns>Failure state string</returns>
        private string GetBlockFailureStateString(TrackBlock block)
        {
            string failString = string.Empty;
            //Check all 8 possible states
            if (!block.Status.BrokenRail && !block.Status.CircuitFail && !block.Status.PowerFail)
            {
                failString = "none";
            }
            else if (!block.Status.BrokenRail && !block.Status.CircuitFail && block.Status.PowerFail)
            {
                failString = "Power Failure";
            }
            else if (!block.Status.BrokenRail && block.Status.CircuitFail && !block.Status.PowerFail)
            {
                failString =  "Circuit Failure";
            }
            else if (!block.Status.BrokenRail && block.Status.CircuitFail && block.Status.PowerFail)
            {
                failString = "Circuit & Power Failure";
            }
            else if (block.Status.BrokenRail && !block.Status.CircuitFail && !block.Status.PowerFail)
            {
                failString = "Broken Rail";
            }
            else if (block.Status.BrokenRail && !block.Status.CircuitFail && block.Status.PowerFail)
            {
                failString = "Broken Rail & Power Failure";
            }
            else if (block.Status.BrokenRail && block.Status.CircuitFail && !block.Status.PowerFail)
            {
                failString = "Broken Rail & Circuit Failure";
            }
            else if (block.Status.BrokenRail && block.Status.CircuitFail && block.Status.PowerFail)
            {
                failString = "Broken Rail, Circuit, & Power Failure";
            }

            return failString;
        }
Exemple #57
0
 /// <summary>
 /// Simulates a track broken rail
 /// </summary>
 /// <param name="block">Block to simulate on</param>
 /// <param name="failure">True to invoke failure or false to clear it</param>
 public void SimulateBrokenRail(TrackBlock block, bool failure)
 {
     if (block != null)
     {
         if (block.Status != null)
         {
             m_log.LogInfoFormat("Setting broken rail of block {0} to {1}", block.Name, failure);
             block.Status.BrokenRail = failure;
         }
     }
 }