Advertisement
agmike

GetJunctionDirectionToObject (only Tracksides)

Aug 21st, 2014
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     final int GetJunctionDirectionToObject(Junction jnc, Trackside 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.         Trackside[] firstInDirection = new Trackside[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.             if (!gs)
  18.                 continue;
  19.             while (gs.SearchNextObject()) {
  20.                 Trackside found = cast <Trackside> gs.GetObject();
  21.                 if (!found)
  22.                     continue;
  23.                 int j;
  24.                 for (j = 0; j < dirCount; ++j)
  25.                     ambiguity = ambiguity or firstInDirection[j] == found;
  26.                 if (!firstInDirection[i])
  27.                     firstInDirection[i] = found;
  28.                 if(found == origin) {
  29.                     ambiguity = ambiguity or originDirection != Junction.DIRECTION_NONE;
  30.                     originDirection = directions[i];
  31.                     break;
  32.                 }
  33.                 float distance = totalDistance + gs.GetDistance();
  34.                 if (distance > MaxSearchDistance or found.isclass(Junction) or ambiguity)
  35.                     break;
  36.                 if(distance >= searchRestartDistance) {
  37.                     totalDistance = distance;
  38.                     gs = found.BeginTrackSearch(gs.GetFacingRelativeToSearchDirection());
  39.                 }
  40.                 IncOps();
  41.             }
  42.         }
  43.         if (ambiguity)
  44.             return Junction.DIRECTION_NONE;
  45.         return originDirection;
  46.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement