static bool GrowingOnWateredTile(TileIndex tile)
{
TrackBits water_track = TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0));
if (water_track != TRACK_BIT_NONE) {
if (water_track == TRACK_BIT_UPPER || water_track == TRACK_BIT_LOWER || water_track == TRACK_BIT_LEFT || water_track == TRACK_BIT_RIGHT) {
TileIndex opposite_tile = INVALID_TILE;
TrackBits opposite_track = TRACK_BIT_NONE;
TileIndex next_tile_1 = INVALID_TILE;
TrackBits next_track_1 = TRACK_BIT_NONE;
TileIndex next_tile_2 = INVALID_TILE;
TrackBits next_track_2 = TRACK_BIT_NONE;
if (water_track == TRACK_BIT_UPPER) {
opposite_tile = TileAddWrap(tile, -1, -1);
opposite_track = TRACK_BIT_LOWER;
next_tile_1 = TileAddWrap(tile, -1, 0);
next_track_1 = _settings_game.pf.forbid_90_deg ? TRACK_BIT_Y | TRACK_BIT_UPPER : TRACK_BIT_3WAY_NW;
next_tile_2 = TileAddWrap(tile, 0, -1);
next_track_2 = _settings_game.pf.forbid_90_deg ? TRACK_BIT_X | TRACK_BIT_UPPER : TRACK_BIT_3WAY_NE;
} else if (water_track == TRACK_BIT_RIGHT) {
opposite_tile = TileAddWrap(tile, -1, 1);
opposite_track = TRACK_BIT_LEFT;
next_tile_1 = TileAddWrap(tile, 0, 1);
next_track_1 = _settings_game.pf.forbid_90_deg ? TRACK_BIT_X | TRACK_BIT_RIGHT : TRACK_BIT_3WAY_NE;
next_tile_2 = TileAddWrap(tile, -1, 0);
next_track_2 = _settings_game.pf.forbid_90_deg ? TRACK_BIT_Y | TRACK_BIT_RIGHT : TRACK_BIT_3WAY_SE;
} else if (water_track == TRACK_BIT_LOWER) {
opposite_tile = TileAddWrap(tile, 1, 1);
opposite_track = TRACK_BIT_UPPER;
next_tile_1 = TileAddWrap(tile, 1, 0);
next_track_1 = _settings_game.pf.forbid_90_deg ? TRACK_BIT_Y | TRACK_BIT_LOWER : TRACK_BIT_3WAY_SE;
next_tile_2 = TileAddWrap(tile, 0, 1);
next_track_2 = _settings_game.pf.forbid_90_deg ? TRACK_BIT_X | TRACK_BIT_LOWER : TRACK_BIT_3WAY_SW;
} else if (water_track == TRACK_BIT_LEFT) {
opposite_tile = TileAddWrap(tile, 1, -1);
opposite_track = TRACK_BIT_RIGHT;
next_tile_1 = TileAddWrap(tile, 0, -1);
next_track_1 = _settings_game.pf.forbid_90_deg ? TRACK_BIT_X | TRACK_BIT_LEFT : TRACK_BIT_3WAY_SW;
next_tile_2 = TileAddWrap(tile, 1, 0);
next_track_2 = _settings_game.pf.forbid_90_deg ? TRACK_BIT_Y | TRACK_BIT_LEFT : TRACK_BIT_3WAY_NW;
}
if (IsValidTile(next_tile_1)) {
next_track_1 &= TrackStatusToTrackBits(GetTileTrackStatus(next_tile_1, TRANSPORT_WATER, 0));
}
if (IsValidTile(next_tile_2)) {
next_track_2 &= TrackStatusToTrackBits(GetTileTrackStatus(next_tile_2, TRANSPORT_WATER, 0));
}
if (next_track_1 != TRACK_BIT_NONE && next_track_2 != TRACK_BIT_NONE) {
if (IsValidTile(opposite_tile)) {
opposite_track &= TrackStatusToTrackBits(GetTileTrackStatus(opposite_track, TRANSPORT_WATER, 0));
}
}
if (next_track_1 != TRACK_BIT_NONE) {
if (next_track_2 == TRACK_BIT_NONE) {
return false;
} else {
if (opposite_track == TRACK_BIT_NONE) {
return true;
} else {
return false;
}
}
}
if (next_track_2 != TRACK_BIT_NONE) {
if (next_track_1 == TRACK_BIT_NONE) {
return false;
} else {
if (opposite_track == TRACK_BIT_NONE) {
return true;
} else {
return false;
}
}
}
if (next_track_1 == TRACK_BIT_NONE && next_track_2 == TRACK_BIT_NONE) {
return false;
}
/* Should never reach here */
return false;
}
/* Should never reach here either */
return false;
}
return false;
}