Advertisement
agmike

GetJunctionDirectionToObject

Aug 20th, 2014
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.92 KB | None | 0 0
  1.     final int GetJunctionDirectionToObject(Junction jnc, MapObject origin)
  2.     {
  3.         int[] directions = new int[4];
  4.         int dirCount = 0;
  5.         directions[dirCount++] = Junction.DIRECTION_BACKWARD;
  6.         directions[dirCount++] = Junction.DIRECTION_LEFT;
  7.         directions[dirCount++] = Junction.DIRECTION_RIGHT;
  8.         directions[dirCount++] = Junction.DIRECTION_FORWARD;
  9.         int originDirection = Junction.DIRECTION_NONE;
  10.         MapObject[] firstInDirection = new MapObject[dirCount];
  11.         bool ambiguity = false;
  12.         float searchRestartDistance = 5000.0f;
  13.         int i;
  14.         for(i = 0; i < dirCount; i++) {
  15.             float totalDistance = 0.0f;
  16.             GSTrackSearch gs = jnc.BeginTrackSearch(directions[i]);
  17.             MapObject found;
  18.             while (found = gs.SearchNext()) {
  19.                 if (!firstInDirection[i])
  20.                     firstInDirection[i] = found;
  21.                 else {
  22.                     int j;
  23.                     for (j = 0; j < dirCount; ++j)
  24.                         if (firstInDirection[j] == found)
  25.                             ambiguity = true;
  26.                 }
  27.                 if(found == origin) {
  28.                     if (originDirection != Junction.DIRECTION_NONE)
  29.                         ambiguity = true;
  30.                     originDirection = directions[i];
  31.                 }
  32.                 float distance = totalDistance + gs.GetDistance();
  33.                 if (distance > MaxSearchDistance or found.isclass(Junction) or ambiguity)
  34.                     return Junction.DIRECTION_NONE;
  35.                 Trackside obj = cast <Trackside> found;
  36.                 if(distance >= searchRestartDistance and obj) {
  37.                     totalDistance = distance;
  38.                     gs = obj.BeginTrackSearch(gs.GetFacingRelativeToSearchDirection());
  39.                 }
  40.                 IncOps();
  41.             }
  42.         }
  43.         return originDirection;
  44.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement