Exemplo n.º 1
0
        private void OffRoadToOffRoad(Point startPoint, Point endPoint, Reusables reusables)
        {
            SearchResult searchResult;
            Point        midPointOne;
            Point        midPointTwo;

            AStarOffRoad AStarOffRoad = new AStarOffRoad();

            drivingNodeList = AStarOffRoad.Go(startPoint, endPoint, false, out searchResult, out midPointOne, vehicle, false, reusables);

            if (searchResult == SearchResult.RoadFound)
            {
                //We found a road, lets re optomise our search looking for that specific point
                drivingNodeList = AStarOffRoad.Go(startPoint, midPointOne, false, out searchResult, out midPointOne, vehicle, false, reusables);


                List <DrivingNode> drivingNodeListThree = AStarOffRoad.Go(endPoint, startPoint, false, out searchResult, out midPointTwo, vehicle, true, reusables);

                if (searchResult == SearchResult.RoadFound)
                {
                    //We found a road, lets re optomise our search looking for that specific point
                    drivingNodeListThree = AStarOffRoad.Go(endPoint, midPointTwo, false, out searchResult, out midPointTwo, vehicle, true, reusables);


                    AStarOnRoad        AStarOnRoad        = new AStarOnRoad();
                    List <DrivingNode> drivingNodeListTwo = AStarOnRoad.Go(midPointOne, midPointTwo, reusables);

                    if (drivingNodeListTwo.Count > 0)
                    {
                        drivingNodeList.RemoveAt(0);  //Need to remove the first one so theres no double up
                    }

                    drivingNodeListThree.Reverse();
                    drivingNodeListThree.AddRange(drivingNodeListTwo);
                    drivingNodeListThree.AddRange(drivingNodeList);

                    drivingNodeList = drivingNodeListThree;
                }
                else if (searchResult == SearchResult.EndFound)
                {
                    //We found it in list three
                    drivingNodeListThree.Reverse();
                    drivingNodeListThree.RemoveAt(drivingNodeListThree.Count - 1);
                    drivingNodeList = drivingNodeListThree;
                }
            }

            //  AddDebug(drivingNodeList);
        }
Exemplo n.º 2
0
        private void OffRoadToOnRoad(Point startPoint, Point endPoint, Reusables reusables)
        {
            SearchResult searchResult;
            Point        midPoint;

            AStarOffRoad AStarOffRoad = new AStarOffRoad();

            drivingNodeList = AStarOffRoad.Go(startPoint, endPoint, false, out searchResult, out midPoint, vehicle, false, reusables);

            if (searchResult == SearchResult.RoadFound)
            {
                AStarOnRoad        AStarOnRoad        = new AStarOnRoad();
                List <DrivingNode> drivingNodeListTwo = AStarOnRoad.Go(midPoint, endPoint, reusables);
                drivingNodeListTwo.AddRange(drivingNodeList);
                drivingNodeList = drivingNodeListTwo;
            }
        }
Exemplo n.º 3
0
        private void OnRoadToOffRoad(Point startPoint, Point endPoint, Reusables reusables)
        {
            SearchResult searchResult;
            Point        midPoint;

            AStarOffRoad AStarOffRoad = new AStarOffRoad();

            //We do this backwards
            drivingNodeList = AStarOffRoad.Go(endPoint, startPoint, false, out searchResult, out midPoint, vehicle, true, reusables);

            if (searchResult == SearchResult.RoadFound)
            {
                //Lets redo our offroad to onroad search as our path is not optimal at all as we were trying to head to a different point
                drivingNodeList = AStarOffRoad.Go(endPoint, midPoint, false, out searchResult, out midPoint, vehicle, true, reusables);

                drivingNodeList.Reverse();
                AStarOnRoad        AStarOnRoad        = new AStarOnRoad();
                List <DrivingNode> drivingNodeListTwo = AStarOnRoad.Go(startPoint, midPoint, reusables);
                drivingNodeList.AddRange(drivingNodeListTwo);
            }
        }
Exemplo n.º 4
0
        public override void Start(Reusables reusables)
        {
            drivingNodeList = new List <DrivingNode>();
            startStyle      = GetSearchStyle(startPoint);
            endStyle        = GetSearchStyle(endPoint);

            if (startStyle == SearchStyle.OnRoad && endStyle == SearchStyle.OnRoad)
            {
                RoadToRoad(startPoint, endPoint, reusables);
            }
            else if (startStyle == SearchStyle.OffRoad && endStyle == SearchStyle.OnRoad)
            {
                OffRoadToOnRoad(startPoint, endPoint, reusables);
            }
            else if (startStyle == SearchStyle.OnRoad && endStyle == SearchStyle.OffRoad)
            {
                OnRoadToOffRoad(startPoint, endPoint, reusables);
            }
            else if (startStyle == SearchStyle.OffRoad && endStyle == SearchStyle.OffRoad)
            {
                OffRoadToOffRoad(startPoint, endPoint, reusables);
            }

            //If we couldnt find it we will clear the list
            if (drivingNodeList.Count > 0)
            {
                if (drivingNodeList[0].GetLocationX() != endPoint.X || drivingNodeList[0].GetLocationY() != endPoint.Y)
                {
                    drivingNodeList.Clear();
                }
            }

            CalculateCorners();

            completed = true;
        }
Exemplo n.º 5
0
        private void RoadToRoad(Point startPoint, Point endPoint, Reusables reusables)
        {
            AStarOnRoad AStarOnRoad = new AStarOnRoad();

            drivingNodeList = AStarOnRoad.Go(startPoint, endPoint, reusables);
        }