Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- final int GetJunctionDirectionToObject(Junction jnc, Trackside origin)
- {
- int[] directions = new int[4];
- int dirCount = 0;
- directions[dirCount++] = Junction.DIRECTION_BACKWARD;
- directions[dirCount++] = Junction.DIRECTION_LEFT;
- directions[dirCount++] = Junction.DIRECTION_RIGHT;
- directions[dirCount++] = Junction.DIRECTION_FORWARD;
- int originDirection = Junction.DIRECTION_NONE;
- Trackside[] firstInDirection = new Trackside[dirCount];
- bool ambiguity = false;
- float searchRestartDistance = 5000.0f;
- int i;
- for(i = 0; i < dirCount; i++) {
- float totalDistance = 0.0f;
- GSTrackSearch gs = jnc.BeginTrackSearch(directions[i]);
- if (!gs)
- continue;
- while (gs.SearchNextObject()) {
- Trackside found = cast <Trackside> gs.GetObject();
- if (!found)
- continue;
- int j;
- for (j = 0; j < dirCount; ++j)
- ambiguity = ambiguity or firstInDirection[j] == found;
- if (!firstInDirection[i])
- firstInDirection[i] = found;
- if(found == origin) {
- ambiguity = ambiguity or originDirection != Junction.DIRECTION_NONE;
- originDirection = directions[i];
- break;
- }
- float distance = totalDistance + gs.GetDistance();
- if (distance > MaxSearchDistance or found.isclass(Junction) or ambiguity)
- break;
- if(distance >= searchRestartDistance) {
- totalDistance = distance;
- gs = found.BeginTrackSearch(gs.GetFacingRelativeToSearchDirection());
- }
- IncOps();
- }
- }
- if (ambiguity)
- return Junction.DIRECTION_NONE;
- return originDirection;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement