| Old revision #pbfwpiqdi | New revision #pae1wjqpy | ||
|---|---|---|---|
| 21 | if (!IsValidTile(opposite_tile)) return false; | 21 | if (!IsValidTile(opposite_tile)) return false; |
| 22 | 22 | ||
| 23 | /* Test adjacent tiles are traversible. */ | 23 | /* Test adjacent tiles are traversible. */ |
| 24 | Track track = TrackBitsToTrack( | 24 | Track track = TrackBitsToTrack(GetTileShipTrackStatus(tile)); |
| 25 | Trackdir main_trackdir = TrackToTrackdir(track); | 25 | Trackdir main_trackdir = TrackToTrackdir(track); |
| 26 | 26 | ||
| 27 | DiagDirection main_dir_1 = TrackdirToExitdir(main_trackdir); | 27 | DiagDirection main_dir_1 = TrackdirToExitdir(main_trackdir); |
| 28 | DiagDirection main_dir_2 = TrackdirToExitdir(ReverseTrackdir(main_trackdir)); | 28 | DiagDirection main_dir_2 = TrackdirToExitdir(ReverseTrackdir(main_trackdir)); |
| 29 | 29 | ||
| 30 | TrackBits trackbits_1 = | 30 | TrackBits trackbits_1 = GetTileShipTrackStatus(AddTileIndexDiffCWrap(tile, TileIndexDiffCByDiagDir(main_dir_1))); |
| 31 | TrackBits trackbits_2 = | 31 | TrackBits trackbits_2 = GetTileShipTrackStatus(AddTileIndexDiffCWrap(tile, TileIndexDiffCByDiagDir(main_dir_2))); |
| 32 | 32 | ||
| 33 | TrackBits main_track_1 = trackbits_1 & DiagdirReachesTracks(main_dir_1); | 33 | TrackBits main_track_1 = trackbits_1 & DiagdirReachesTracks(main_dir_1); |
| 34 | TrackBits main_track_2 = trackbits_2 & DiagdirReachesTracks(main_dir_2); | 34 | TrackBits main_track_2 = trackbits_2 & DiagdirReachesTracks(main_dir_2); | … | … |
| 37 | if (!main_track_1 || !main_track_2) return false; | 37 | if (!main_track_1 || !main_track_2) return false; |
| 38 | 38 | ||
| 39 | Track opposite_track = TrackToOppositeTrack(track); | 39 | Track opposite_track = TrackToOppositeTrack(track); |
| 40 | |||
| 41 | Trackdir oppo_trackdir = TrackToTrackdir(opposite_track); | 40 | Trackdir oppo_trackdir = TrackToTrackdir(opposite_track); |
| 42 | 41 | ||
| 43 | TrackBits oppo_track_1 = trackbits_1 & DiagdirReachesTracks(TrackdirToExitdir(oppo_trackdir)); | 42 | TrackBits oppo_track_1 = trackbits_1 & DiagdirReachesTracks(TrackdirToExitdir(oppo_trackdir)); | … | … |
| 45 | 44 | ||
| 46 | TrackBits mirror = TRACK_BIT_CROSS | (corner & 1 ? TRACK_BIT_HORZ : TRACK_BIT_VERT); | 45 | TrackBits mirror = TRACK_BIT_CROSS | (corner & 1 ? TRACK_BIT_HORZ : TRACK_BIT_VERT); |
| 47 | 46 | ||
| 48 | /* Is | 48 | /* Is opposite tile connected to adjacent tiles? */ |
| 49 | if (HasTrack( | 49 | if (HasTrack(GetTileShipTrackStatus(opposite_tile), opposite_track) && |
| 50 | oppo_track_1 & (main_track_1 ^ mirror) && oppo_track_2 & (main_track_2 ^ mirror)) return false; | 49 | oppo_track_1 & (main_track_1 ^ mirror) && oppo_track_2 & (main_track_2 ^ mirror)) return false; |
| 51 | 50 | ||
| 52 | /* There is either no track or an incomplete connection via opposite | 52 | /* There is either no track or an incomplete connection via opposite tile. */ |
| 53 | return true; | 52 | return true; |
| 54 | } | 53 | } |