Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- final int GetJunctionDirectionToObject(Junction jnc, MapObject 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;
- MapObject[] firstInDirection = new MapObject[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]);
- MapObject found;
- while (found = gs.SearchNext()) {
- if (!firstInDirection[i])
- firstInDirection[i] = found;
- else {
- int j;
- for (j = 0; j < dirCount; ++j)
- if (firstInDirection[j] == found)
- ambiguity = true;
- }
- if(found == origin) {
- if (originDirection != Junction.DIRECTION_NONE)
- ambiguity = true;
- originDirection = directions[i];
- }
- float distance = totalDistance + gs.GetDistance();
- if (distance > MaxSearchDistance or found.isclass(Junction) or ambiguity)
- return Junction.DIRECTION_NONE;
- Trackside obj = cast <Trackside> found;
- if(distance >= searchRestartDistance and obj) {
- totalDistance = distance;
- gs = obj.BeginTrackSearch(gs.GetFacingRelativeToSearchDirection());
- }
- IncOps();
- }
- }
- return originDirection;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement