Пример #1
0
        void prepareChangingLane(bool shouldTurn)
        {
            RltDirection turnDir = trajectory.getNextRltDirection();

            //Debug.Log(isChangingLanes.ToString() + turnDir.ToString());

            if (!isChangingLanes && turnDir != RltDirection.NA)
            {
                switch (turnDir)
                {
                case RltDirection.Left:
                    if (shouldTurn)
                    {
                        preferedLane = trajectory.getCurrentRoad().getLeftmostLane();
                    }
                    else if (trajectory.currentLane != trajectory.getCurrentRoad().getLeftmostLane())
                    {
                        preferedLane = trajectory.getLeftAdjacentLane();
                    }
                    break;

                case RltDirection.Right:
                    if (shouldTurn)
                    {
                        preferedLane = trajectory.getCurrentRoad().getRightmostLane();
                    }
                    else if (trajectory.currentLane != trajectory.getCurrentRoad().getRightmostLane())
                    {
                        preferedLane = trajectory.getRightAdjacentLane();
                    }
                    break;

                default:
                    preferedLane = trajectory.getCurrentLane();
                    break;
                }
                if (preferedLane != trajectory.getCurrentLane())
                {
                    changeLane(preferedLane);
                }
            }
        }
Пример #2
0
 public static AbsDirection addDirection(AbsDirection absDir, RltDirection rrtDir)
 {
     if (rrtDir == RltDirection.Straight)
     {
         return(absDir);
     }
     else if (rrtDir == RltDirection.Left)
     {
         return((AbsDirection)(((int)absDir + 3) % 4));
     }
     else if (rrtDir == RltDirection.Right)
     {
         return((AbsDirection)(((int)absDir + 1) % 4));
     }
     else
     {
         Debug.Log("Util - addDirection - No RltDirection : " + rrtDir);
         return(AbsDirection.NA);
     }
 }
Пример #3
0
        private int getNextDestination(AbsDirection prvDirection, Junction currentJunction, List <Road> roads, ref Road nextRoad)
        {
            if (currentJunction.isNullJunction)
            {
                return(-1);
            }

            int failedDirection = 0;

            bool[] failedDirIndex = new bool[3];
            failedDirIndex[0] = false;
            failedDirIndex[1] = false;
            failedDirIndex[2] = false;

            while (failedDirection < 3)
            {
                // sample next destination
                RltDirection direction = getRandomDirection(failedDirIndex);
                if (direction == RltDirection.NA)
                {
                    Debug.Log("ERROR : Trajectory - getNextDestination - Error in generating random direction");
                    return(-1);
                }
                if (direction == RltDirection.Straight)
                {
                    if (currentJunction.connectRoadIdx[(int)prvDirection] >= 0)
                    {
                        nextRoad = roads[currentJunction.connectRoadIdx[(int)prvDirection]];
                        return((int)Util.addDirection(prvDirection, direction));
                    }
                    else
                    {
                        failedDirIndex[(int)RltDirection.Straight] = true;
                        failedDirection++;
                    }
                }
                else if (direction == RltDirection.Left)
                {
                    if (currentJunction.connectRoadIdx[((int)prvDirection + 3) % 4] >= 0)
                    {
                        nextRoad = roads[currentJunction.connectRoadIdx[((int)prvDirection + 3) % 4]];
                        return((int)Util.addDirection(prvDirection, direction));
                    }
                    else
                    {
                        failedDirIndex[(int)RltDirection.Left] = true;
                        failedDirection++;
                    }
                }
                else if (direction == RltDirection.Right)
                {
                    if (currentJunction.connectRoadIdx[((int)prvDirection + 1) % 4] >= 0)
                    {
                        nextRoad = roads[currentJunction.connectRoadIdx[((int)prvDirection + 1) % 4]];
                        return((int)Util.addDirection(prvDirection, direction));
                    }
                    else
                    {
                        failedDirIndex[(int)RltDirection.Right] = true;
                        failedDirection++;
                    }
                }
            }

            return(-1);
        }