public StationPath(StationPath original)
 {
     traveller     = new AETraveller(original.traveller);
     MainPath      = false;
     ComponentItem = new List <GlobalItem>();
     SidesItem     = new List <SideItem>();
     PathName      = "";
     if (original.ComponentItem.Count > 0)
     {
         foreach (GlobalItem componentItem in original.ComponentItem)
         {
             ComponentItem.Add(componentItem);
         }
         foreach (SideItem sideItem in original.SidesItem)
         {
             SidesItem.Add(sideItem);
         }
         complete = false;
         if (original.ComponentItem[original.ComponentItem.Count - 1].GetType() == typeof(AEJunctionItem))
         {
             jctnIdx = original.ComponentItem.Count - 1;
         }
         else
         {
             jctnIdx = -1;
         }
         NbrPlatform       = original.NbrPlatform;
         NbrSiding         = original.NbrSiding;
         Siding            = original.Siding;
         Platform          = original.Platform;
         PassingYard       = original.PassingYard;
         LastCommonTrack   = original.LastCommonTrack;
         directionJunction = 1;
     }
 }
        /// <summary>
        /// Scan the current orRouteConfig and search for items related to the given node
        /// </summary>
        /// <param name="iNode">The current node index</param>
        /// <param name="orRouteConfig">The Open Rail configuration coming from Editor</param>
        /// <param name="trackNodes">The list of MSTS Track Nodes</param>
        /// <param name="tsectiondat">The list of MSTS Section datas</param>
        public List <TrackCircuitElement> GetORItemForNode(int iNode, TrackNode[] trackNodes, TrackSectionsFile tsectiondat)
        {
            List <TrackCircuitElement> trackCircuitElements = new List <TrackCircuitElement>();

            if (AllItems.Count <= 0)
            {
                return(trackCircuitElements);
            }
            foreach (var item in AllItems)
            {
                switch (item.typeItem)
                {
                case (int)TypeItem.STATION_CONNECTOR:
                    if (item.associateNodeIdx != iNode)
                    {
                        continue;
                    }
                    TrackNode   node   = trackNodes[iNode];
                    AETraveller travel = new AETraveller(traveller);
                    travel.place(node);
                    float position = travel.DistanceTo(item);
                    TrackCircuitElement element = (TrackCircuitElement) new TrackCircuitElementConnector(item, position);
                    trackCircuitElements.Add(element);
                    break;

                default:
                    break;
                }
            }

            return(trackCircuitElements);
        }
 public void SetTraveller(TrackSectionsFile TSectionDat, TrackDatabaseFile TDB)
 {
     TrackNode[] TrackNodes = TDB.TrackDB.TrackNodes;
     traveller = new AETraveller(TSectionDat, TDB);
     foreach (var item in routeItems)
     {
         if (item.GetType() == typeof(StationItem))
         {
             ((StationItem)item).setTraveller(traveller);
         }
     }
 }
Exemple #4
0
        protected void addTrItem(TrackSegment lineSeg, TrItem item)
        {
            AETraveller travel = new AETraveller(traveller);

            if (item.ItemType == TrItem.trItemType.trSIDING || item.ItemType == TrItem.trItemType.trPLATFORM)
            {
                SideItem siding = mstsItems.AddSiding(lineSeg, item, travel);
                orRouteConfig.AddItem((GlobalItem)siding);
            }
            else if (item.ItemType == TrItem.trItemType.trCROSSOVER)
            {
                AECrossOver crossOver = mstsItems.AddCrossOver(lineSeg, item, travel);
                orRouteConfig.AddItem((GlobalItem)crossOver);
            }
        }
 public StationPath(AETraveller travel)
 {
     ComponentItem   = new List <GlobalItem>();
     SidesItem       = new List <SideItem>();
     complete        = false;
     jctnIdx         = -1;
     traveller       = travel;
     Siding          = 0;
     Platform        = 0;
     PassingYard     = 0;
     NbrPlatform     = 0;
     NbrSiding       = 0;
     LastCommonTrack = 0;
     PathName        = "";
 }
Exemple #6
0
        public List <StationPath> searchPaths(AETraveller myTravel, List <TrackSegment> listConnectors, MSTSItems aeItems, StationItem parent)
        {
            List <StationPath> paths;

            if (!Configured)
            {
                return(null);
            }
            if (stationPaths == null)
            {
                stationPaths = new StationPaths();
            }
            stationPaths.Clear();
            paths = stationPaths.explore(myTravel, listConnectors, aeItems, parent);
            return(paths);
        }
 public StationPath(GlobalItem startNode, AETraveller travel)
 {
     ComponentItem = new List <GlobalItem>();
     SidesItem     = new List <SideItem>();
     ComponentItem.Add(startNode);
     complete          = false;
     jctnIdx           = -1;
     traveller         = new AETraveller(travel);
     Siding            = 0;
     Platform          = 0;
     PassingYard       = 0;
     NbrPlatform       = 0;
     NbrSiding         = 0;
     LastCommonTrack   = 0;
     directionJunction = 0;
     PathName          = "";
 }
 // Methods
 public StationPath()
 {
     ComponentItem     = new List <GlobalItem>();
     SidesItem         = new List <SideItem>();
     complete          = false;
     jctnIdx           = -1;
     traveller         = null;
     Siding            = 0;
     Platform          = 0;
     PassingYard       = 0;
     NbrPlatform       = 0;
     NbrSiding         = 0;
     MainPath          = true;
     LastCommonTrack   = 0;
     directionJunction = 0;
     PathName          = "";
 }
Exemple #9
0
        protected List <KeyValuePair <int, int> > distributeTrItem(TrackNode node)
        {
            List <KeyValuePair <int, int> > TrItemBySectionId = new List <KeyValuePair <int, int> >();

            if (node != null && node.TrVectorNode != null && node.TrVectorNode.TrItemRefs != null)
            {
                AETraveller travel = new AETraveller(traveller);
                travel.place(node);
                for (int cnt = 0; cnt < node.TrVectorNode.TrItemRefs.Length; cnt++)
                {
                    var item = TDB.TrackDB.TrItemTable[node.TrVectorNode.TrItemRefs[cnt]];
                    travel.MoveTo(item);
                    int idxSection = travel.TrackVectorSectionIndex;
                    TrItemBySectionId.Add(new KeyValuePair <int, int>(idxSection, node.TrVectorNode.TrItemRefs[cnt]));
                }
            }
            return(TrItemBySectionId);
        }
 public void StartSearchPath(TrackPDP startPoint)
 {
     searchTraveller = new AETraveller(this.traveller);
     searchTraveller.place((int)startPoint.TileX, (int)startPoint.TileZ, startPoint.X, startPoint.Z);
 }
Exemple #11
0
        public List <StationPath> explore(AETraveller myTravel, List <TrackSegment> listConnector, MSTSItems aeItems, StationItem parent)
        {
            List <AEJunctionItem> insideJunction = new List <AEJunctionItem>();
            Stopwatch             stopWatch      = new Stopwatch();
            TimeSpan ts;
            string   elapsedTime;

            stopWatch.Start();
            TrackNode       currentNode             = myTravel.GetCurrentNode();
            int             pathChecked             = 0;
            int             trackNodeIndex          = myTravel.TrackNodeIndex;
            int             lastCommonTrack         = trackNodeIndex;
            int             trackVectorSectionIndex = myTravel.TrackVectorSectionIndex;
            TrVectorSection currentSection          = myTravel.GetCurrentSection();
            GlobalItem      startNode = aeItems.GetTrackSegment(currentNode, trackVectorSectionIndex);

            //paths.Add(new StationPath(startNode, myTravel));
            paths.Add(new StationPath(myTravel));
            paths[0].LastCommonTrack = trackNodeIndex;
            while ((pathChecked < paths.Count && !paths[pathChecked].complete) && paths.Count < 100)
            {
                TrackNode node2 = paths[pathChecked].explore(aeItems, listConnector, trackNodeIndex, parent);
                ts = stopWatch.Elapsed;

                // Format and display the TimeSpan value.
                elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                            ts.Hours, ts.Minutes, ts.Seconds,
                                            ts.Milliseconds / 10);
                Console.WriteLine("RunTime " + elapsedTime);

                if (node2.TrJunctionNode != null)
                {
                    AEJunctionItem junction = (AEJunctionItem)paths[pathChecked].ComponentItem[paths[pathChecked].ComponentItem.Count - 1];
                    if (!insideJunction.Contains(junction))
                    {
                        insideJunction.Add(junction);
                    }
                    if (node2.TrPins[0].Link == lastCommonTrack)
                    {
                        paths[pathChecked].jctnIdx         = paths[pathChecked].ComponentItem.Count - 1;
                        paths[pathChecked].LastCommonTrack = lastCommonTrack;
                        paths.Add(new StationPath(paths[pathChecked]));
                        paths[pathChecked].directionJunction = 0;
                        paths[pathChecked].switchJnct(0);
                    }
                    else
                    {
                        paths[pathChecked].NextNode();
                    }
                }
                else if (node2.TrEndNode)
                {
                    AEBufferItem buffer = (AEBufferItem)paths[pathChecked].ComponentItem[paths[pathChecked].ComponentItem.Count - 1];
                    if (!buffer.Configured || buffer.DirBuffer == AllowedDir.OUT)
                    {
                        //AEJunctionItem junction = (AEJunctionItem)paths[pathChecked].ComponentItem[paths[pathChecked].jctnIdx];
                        paths.RemoveAt(pathChecked);
                    }
                    else
                    {
                        paths[pathChecked].setComplete(buffer);
                        pathChecked++;
                    }
                    if (pathChecked < paths.Count)
                    {
                        paths[pathChecked].switchJnct(paths[pathChecked].directionJunction);
                        if (paths[pathChecked].ComponentItem.Count > 1)
                        {
                            lastCommonTrack = (int)paths[pathChecked].LastCommonTrack;
                        }
                        else
                        {
                            lastCommonTrack = trackNodeIndex;
                        }
                    }
                }
                else
                {
                    int lastIndex = (int)node2.Index;
                    //lastCommonTrack = (int)node2.Index;
                    if (paths[pathChecked].complete)
                    {
                        TrackSegment segment = (TrackSegment)paths[pathChecked].ComponentItem[paths[pathChecked].ComponentItem.Count - 1];

                        if (segment.HasConnector == null ||
                            (segment.HasConnector != null &&
                             (segment.HasConnector.dirConnector == AllowedDir.IN || !segment.HasConnector.isConfigured())))
                        {
                            paths.RemoveAt(pathChecked);
                        }
                        else
                        {
                            pathChecked++;
                        }
                        //pathChecked++;
                        if (pathChecked < paths.Count)
                        {
                            lastIndex = (int)paths[pathChecked].ComponentItem[paths[pathChecked].ComponentItem.Count - 2].associateNode.Index;
                            paths[pathChecked].switchJnct(paths[pathChecked].directionJunction);
                        }
                    }
                    if (pathChecked < paths.Count)
                    {
                        if (paths[pathChecked].ComponentItem.Count > 1)
                        {
                            lastCommonTrack = lastIndex;
                            //lastCommonTrack = (int)paths[pathChecked].ComponentItem[paths[pathChecked].ComponentItem.Count - 2].associateNode.Index;
                        }
                        else
                        {
                            lastCommonTrack = trackNodeIndex;
                        }
                    }
                }
            }
            stopWatch.Stop();
            ts = stopWatch.Elapsed;

            // Format and display the TimeSpan value.
            elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                        ts.Hours, ts.Minutes, ts.Seconds,
                                        ts.Milliseconds / 10);
            Console.WriteLine("RunTime " + elapsedTime);

            pathChecked = 1;
            foreach (StationPath path in paths)
            {
                if (path.PassingYard > MaxPassingYard)
                {
                    MaxPassingYard = path.PassingYard;
                }
                if (path.PassingYard < ShortPassingYard)
                {
                    ShortPassingYard = path.PassingYard;
                }
            }
            return(paths);
        }