src/train_cmd.cpp
changeset 8606 24fd4e7af185
parent 8598 ddd1f342b0da
child 8607 71d80729f3cf
equal deleted inserted replaced
8605:4f525d33340a 8606:24fd4e7af185
  3435 	if (!TrainCanLeaveTile(v)) return INVALID_TILE;
  3435 	if (!TrainCanLeaveTile(v)) return INVALID_TILE;
  3436 
  3436 
  3437 	DiagDirection dir = TrainExitDir(v->direction, v->u.rail.track);
  3437 	DiagDirection dir = TrainExitDir(v->direction, v->u.rail.track);
  3438 	TileIndex tile = v->tile + TileOffsByDiagDir(dir);
  3438 	TileIndex tile = v->tile + TileOffsByDiagDir(dir);
  3439 
  3439 
  3440 	/* not a crossing || wrong axis || wrong railtype || wrong owner */
  3440 	/* not a crossing || wrong axis || unusable rail (wrong type or owner) */
  3441 	if (!IsLevelCrossingTile(tile) || DiagDirToAxis(dir) == GetCrossingRoadAxis(tile) ||
  3441 	if (!IsLevelCrossingTile(tile) || DiagDirToAxis(dir) == GetCrossingRoadAxis(tile) ||
  3442 			!CheckCompatibleRail(v, tile) || GetTileOwner(tile) != v->owner) {
  3442 			!CheckCompatibleRail(v, tile)) {
  3443 		return INVALID_TILE;
  3443 		return INVALID_TILE;
  3444 	}
  3444 	}
  3445 
  3445 
  3446 	return tile;
  3446 	return tile;
  3447 }
  3447 }
  3483 	TrackBits bits = (TrackBits)((ts | (ts >> 8)) & TRACK_BIT_MASK);
  3483 	TrackBits bits = (TrackBits)((ts | (ts >> 8)) & TRACK_BIT_MASK);
  3484 	if (_patches.pathfinder_for_trains != VPF_NTP && _patches.forbid_90_deg) {
  3484 	if (_patches.pathfinder_for_trains != VPF_NTP && _patches.forbid_90_deg) {
  3485 		bits &= ~TrackCrossesTracks(FindFirstTrack(v->u.rail.track));
  3485 		bits &= ~TrackCrossesTracks(FindFirstTrack(v->u.rail.track));
  3486 	}
  3486 	}
  3487 
  3487 
  3488 	/* no suitable trackbits at all || wrong railtype || not our track */
  3488 	/* no suitable trackbits at all || unusable rail (wrong type or owner) */
  3489 	if (bits == TRACK_BIT_NONE || !CheckCompatibleRail(v, tile) || GetTileOwner(tile) != v->owner) {
  3489 	if (bits == TRACK_BIT_NONE || !CheckCompatibleRail(v, tile)) {
  3490 		return TrainApproachingLineEnd(v, false);
  3490 		return TrainApproachingLineEnd(v, false);
  3491 	}
  3491 	}
  3492 
  3492 
  3493 	/* approaching red signal */
  3493 	/* approaching red signal */
  3494 	if ((ts & (ts >> 16)) != 0) return TrainApproachingLineEnd(v, true);
  3494 	if ((ts & (ts >> 16)) != 0) return TrainApproachingLineEnd(v, true);