1
0
Fork 0

Change: Avoid adjacent fence fields.

This restores pre-r23168 behaviour of only a single fence between adjacent fields.
pull/12070/head
Peter Nelson 2024-02-08 18:32:44 +00:00 committed by Michael Lutz
parent d6c5efd795
commit 58ed38be03
1 changed files with 8 additions and 3 deletions

View File

@ -1013,17 +1013,22 @@ static bool IsSuitableForFarmField(TileIndex tile, bool allow_fields)
static void SetupFarmFieldFence(TileIndex tile, int size, byte type, DiagDirection side) static void SetupFarmFieldFence(TileIndex tile, int size, byte type, DiagDirection side)
{ {
TileIndexDiff diff = (DiagDirToAxis(side) == AXIS_Y ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); TileIndexDiff diff = (DiagDirToAxis(side) == AXIS_Y ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
TileIndexDiff neighbour_diff = TileOffsByDiagDir(side);
do { do {
tile = Map::WrapToMap(tile); tile = Map::WrapToMap(tile);
if (IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CLEAR_FIELDS)) { if (IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CLEAR_FIELDS)) {
TileIndex neighbour = tile + neighbour_diff;
if (!IsTileType(neighbour, MP_CLEAR) || !IsClearGround(neighbour, CLEAR_FIELDS) || GetFence(neighbour, ReverseDiagDir(side)) == 0) {
/* Add fence as long as neighbouring tile does not already have a fence in the same position. */
byte or_ = type; byte or_ = type;
if (or_ == 1 && Chance16(1, 7)) or_ = 2; if (or_ == 1 && Chance16(1, 7)) or_ = 2;
SetFence(tile, side, or_); SetFence(tile, side, or_);
} }
}
tile += diff; tile += diff;
} while (--size); } while (--size);